IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Cherche requête de mise à jour


Sujet :

SQLite

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Cherche requête de mise à jour
    Bonjour à tous,
    Je débute en SQLITE et je rencontre un petit soucis. J'ai une table avec 280000 enregistrements. J'aimerai récupérer la valeur d'un champ(a) d'une ligne et l'insérer sur une autre ligne lorsque ces lignes ont un autre champs en commun (b).

    a b c
    Ligne 1 10 25001 A
    Ligne 2 25001 B
    Ligne 3 20 25002 X
    Ligne 4 25002 Y
    Ligne 5 25002 Z
    Pour obtenir
    a b c
    Ligne 1 10 25001 A
    Ligne 2 10 25001 B
    Ligne 3 20 25002 X
    Ligne 4 20 25002 Y
    Ligne 5 20 25002 Z

    Le champ b ne possède pas toujours plusieurs lignes identiques. Si c'est le cas le champs C prends une valeur.
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 480
    Points
    28 480
    Par défaut
    La première question que je me pose est la suivante : est-ce qu'il peut y avoir plus d'une valeur connue de la colonne A pour chaque valeur de la colonne B ? Dans ce cas, laquelle prendre ?

    Si la réponse à la première question est négative, la solution est assez simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update  matable as tgt
    set tgt.A = (   select  src.A
                    from    matable as  src
                    where   src.B   = tgt.B
                        and src.A   is not null
                )
    where   tgt.A   is null

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse.
    Pour être plus clair, dans ma table, j'ai une colonne (b) correspondant à un identifiant. Chaque identifiant est divisé en sous catégorie avec la colonne (d). Je souhaiterai récupérer la valeur de la colonne (a) quand la sous catégorie = 10 et l'inscrire dans les sous-catégories =21 :

    a b c d
    Ligne 1 10 25001 10
    Ligne 2 25001 A 21
    Ligne 3 25001 B 21
    Ligne 4 25001 30
    Ligne 5 25001 36

    Pour obtenir
    a b c d
    Ligne 1 10 25001 10
    Ligne 2 10 25001 A 21
    Ligne 3 10 25001 B 21
    Ligne 4 25001 30
    Ligne 5 25001 36

    J'ai l'impression que mon sqlite studio ne prends pas en charge le UPDATE xxx AS xxx

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update MaTable
       set A          = src.A
      from MaTable   as src
     where src.B      = MaTable.B
       and src.D      = 10
       and src.A     is not null
       and MaTable.A is null
       and MaTable.D  = 21

  5. #5
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci, mais l'instruction bloque au niveau du SET FROM....

    Puis-je remplacer ta proposition par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update MaTable
       set A          = (SELECT src.A
      from MaTable   as src
     where src.B      = MaTable.B
       and src.D      = 10
       and src.A     is not null
       and MaTable.A is null
       and MaTable.D  = 21)

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Effectivement Update From est assez récent et supporté depuis le 3.33 ; source : https://sqlite.org/lang_update.html.

    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    update MaTable
       set A = (select A
                  from MaTable as src
                 where src.B  = MaTable.B
                   and src.D  = 10
                   and src.A is not null)
     where A is null
       and D  = 21
       and exists (select null
                     from MaTable as src
                    where src.B  = MaTable.B
                      and src.D  = 10
                      and src.A is not null);

  7. #7
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    La requête a tournée toute la nuit sans aboutir. La table possède 228 000 enregistrements, mais je trouve çà un peu long :-). Auriez-vous une idée ?

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Rajoutez un index sur la colonne B et/ou D.
    Je ne sais pas s'il y a des statistiques dans SQLite à compiler pour les index, si c'est le cas faites le.

  9. #9
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Novembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Novembre 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est parfait. Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête de mise à jour
    Par Daniel MOREAU dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/09/2006, 15h18
  2. Problème avec une requête de mise à jour
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2006, 13h16
  3. Requête de mise à jour
    Par Deejoh dans le forum Access
    Réponses: 4
    Dernier message: 24/05/2006, 13h02
  4. Réponses: 2
    Dernier message: 10/03/2006, 14h55
  5. Réponses: 6
    Dernier message: 29/11/2005, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo