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 : 21
    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
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 647
    Points : 28 659
    Points
    28 659
    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
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  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 : 21
    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

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 088
    Points : 16 288
    Points
    16 288
    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 : 21
    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

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 088
    Points : 16 288
    Points
    16 288
    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 : 21
    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

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 088
    Points : 16 288
    Points
    16 288
    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 : 21
    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