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

Requêtes et SQL. Discussion :

Dupliquer des lignes pour une seule requête


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Dupliquer des lignes pour une seule requête
    Bonjour,
    J'ai une table avec des personnes inscrites, soit "Monsieur", soit "Madame" ou bien "Monsieur et Madame" pour les couples sur un seul enregistrement.
    Je voudrait faire une requête qui duplique ces résultats "Monsieur et Madame" afin de pouvoir manipuler les données (attribuer chambres ou infos individus) et avoir le bon nombre de personnes inscrites

    J'ai fais l'union d'une requête qui récupère seulement mon critère et une requête qui récupère l'ensemble mais du coup il ne me duplique pas les lignes mais je récupère la même table qu'à l'origine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Participants.*
    WHERE (((Participants.Nom) Like "*"+"et Madame"+"*"))
    UNION SELECT Participants.*
    FROM Participants;
    Comment puis-je récupérer deux fois les enregistrement "Monsieur et Madame" dans ma requête ?
    Par avance, merci !

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    si je ne me trompe pas, ta requête est correcte (sauf qu'il manque "From Participants" pour le premier Select) et que tu dois avoir une clé primaire unique de type auto-incrément.
    Je ne sais pas si c'est une anomalie mais j'ai déjà constaté ce comportement sur Access qui doit comparer les clés primaires uniques de toutes les sous-requêtes et considérer que se sont les mêmes enregistrements dès lors qu'elles apparaissent plus d'une fois et ceci même quand le champ ne fait pas partie de la sélection. Pour contrer cette "anomalie", j'ai trouvé une parade toute simple (à condition que ta table contient aussi une clé primaire de type auto-incrément) c'est de "piéger" le contrôle sur la clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT []+DMax("[N°]","[Participants]") AS Nbr, Nom
    FROM Participants
    WHERE Nom Like "*" & "et Madame" & "*"
    UNION SELECT N°, Nom
    FROM Participants
    ORDER BY nom;
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    En creusant, j'ai trouvé beaucoup plus simple : il suffit de distinguer les sous-requêtes avec une constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 1,*
    FROM participants
    WHERE nom Like "*" & " et Madame" & "*"
    UNION SELECT 2,*
    FROM participants
    order by nom;
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Super ! Ça marche très bien et c'est effectivement très simple.
    Est-ce que je peux , à chaque fois que je lance cette requête, la sauvegarder sous forme de table pour pouvoir ajouter des données différentes pour les deux champs que j'aurai séparé et écraser la table précédente en concevant les modifications éventuelles ? Exemple :
    "Monsieur et Madame X" est devenu deux lignes auxquels je veux ajouter une chambre via un formulaire donc je stock ma requête dans une table, je l'ouvre via mon formulaire et ça mete la table à jour

    Monsier X chambre A
    Madame X chambre B

    Et quand j’exécute à nouveau ma requête, qu'il me la stock toujours sur cette table et que j'ai toujours mes chambres ?

    Ou il vaut mieux que je fasse une table jointe séparément pour les infos en plus ? C'est peut-être ça la bonne méthode ?
    En tout cas, comment stocker la requête dans une table ? Via VB ?

    Par avance, merci !

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    En tout cas, comment stocker la requête dans une table ?
    Tu peux convertir ta requête union en requête de création de table ou d'ajout dans une table existante :
    pour créer une nouvelle table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * INTO nouvelletable SELECT *
    pour ajouter à une table existante :puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM (SELECT 1 as id,* FROM participants
    WHERE nom Like "*" & " et Madame" & "*"
    UNION SELECT 2,* FROM participants
    ORDER BY nom);
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. [MySQL] Dupliquer des lignes d'une table dans une meme table
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/06/2009, 21h22
  2. SQL : Regrouper des lignes dans une seule colonne
    Par manoir62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2009, 18h06
  3. Multiples appels d'une servlet pour une seule requête !
    Par threshold dans le forum Firefox
    Réponses: 0
    Dernier message: 08/09/2008, 14h13
  4. Plusieurs lignes pour une sous-requête (erreur #1242)
    Par Sieldev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2007, 01h21
  5. comment forcer l'exécution des macros pour une seule base ?
    Par tristan_sauvage dans le forum Access
    Réponses: 4
    Dernier message: 21/08/2006, 11h59

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