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

Langage SQL Discussion :

[requête] Lister les enregistrements parents ayant un enfant au moins


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut [requête] Lister les enregistrements parents ayant un enfant au moins
    Bonjour.

    J'ai encore et toujours des questions existentielles sur ce qu'on peut faire comme requête "standards".

    Je me demandais s'il était possible de faire quelque chose dans le genre :

    J'ai des Trucs, qui sont dans des Groupes. Chaque truc a un numéro.
    Je voudrais faire une requête qui me revoie tous les trucs qui vérifient cette condition : "chaque truc renvoyé doit avoir dans son groupe au moins un truc dont le numéro est plus petit qu'un numéro donné"

    Voici ce que ça donnerait commes tables, et comme résultat attendu.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE Truc
    (idTruc INTEGER,
    numero INTEGER,
     idGroupe INTEGER,
     CONSTRAINT PK_Truc PRIMARY KEY (idTruc));
     
    CREATE TABLE Groupe
    (idGroupe INTEGER,
     CONSTRAINT PK_Groupe PRIMARY KEY (idGroupe));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    INSERT INTO Groupe (idGroupe) 
    VALUES (1);
    INSERT INTO Groupe (idGroupe) 
    VALUES (2);
     
    INSERT INTO Truc (idTruc, numero, idGroupe)
    VALUES (1, 10, 1);
    INSERT INTO Truc (idTruc, numero, idGroupe)
    VALUES (2, 15, 1);
    INSERT INTO Truc (idTruc, numero, idGroupe)
    VALUES (3, 20, 2);
    INSERT INTO Truc (idTruc, numero, idGroupe)
    VALUES (4, 25, 2);
    Je cherche a avoir les trucs dont au moins un des trucs du groupe a un numéro plus petit que 12.

    Autrement dit, je devrais avoir cette sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -- Le résultat attendu :
    idTruc   
    ------
    1
    2
    Est-ce que c'est possible ?
    A vue de nez je n'en ai pas l'impression mais je suis encore un peu dans le brouilard.

    Si c'est possible, comment ?

    Merci beaucoup de votre aide.

    EDIT : Houlà, je m'étais trompé dans le titre. Toutes mes excuses.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.idTruc, a.numero, a.idGroupe
    FROM dvp_truc a INNER JOIN dvp_truc b
                          ON a.IdGroupe = b.IdGroupe
    GROUP BY a.idTruc, a.numero, a.idGroupe
    HAVING MIN (b.Numero) < 12;

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    peut etre ceci (si sous requetes acceptées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select id_truc from groupe 
    where idgroupe in 
    (select idgroupe from groupe  where numero <12)

  4. #4
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Je pense que ça devrait aller. Merci beaucoup.

    Je l'aurai un jour... Je l'aurai

    Par contre :
    Citation Envoyé par Cybher
    peut etre ceci (si sous requetes acceptées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select id_truc from groupe 
    where idgroupe in 
    (select idgroupe from groupe  where numero <12)
    nomero n'étant pas dans Groupe, j'en doute.

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Autres solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT idTruc, numero, idGroupe
    FROM dvp_truc WHERE IdGroupe IN (SELECT IdGroupe FROM dvp_truc WHERE Numero) < 12);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idTruc, numero, idGroupe
    FROM dvp_truc a 
    WHERE EXISTS (SELECT NULL FROM FROM dvp_truc b
                  WHERE a.IdGroupe = b.IdGroupe AND b.Numero < 12);

  6. #6
    Membre confirmé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Points : 645
    Points
    645
    Par défaut
    Merci beaucoup.
    Ca marche parfaitement.
    Je pense que la version avec la jointure est plus performante. Reste a tester avec la vraie requête qui joint 10 tables avec plein d'autres conditions...

    Je viens de me rendre compte finalement que ça ressemble beaucoup à mon précédent post.

    C'est une logique que je n'ai pas encore. Mais elle arrive gentiment.

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Par contre :
    Citation:
    Cybher a écrit :
    peut etre ceci (si sous requetes acceptées)
    Code :
    select id_truc from groupe where idgroupe in (select idgroupe from groupe where numero <12)



    nomero n'étant pas dans Groupe, j'en doute
    en effet c'est la table truc et pas groupe...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/12/2014, 17h39
  2. Réponses: 1
    Dernier message: 28/02/2011, 09h28
  3. Lister les enregistrements qui ne sont pas dans une table
    Par toss.net dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2010, 11h25
  4. Dbase IV : Lister les enregistrements
    Par SpIrIt505050 dans le forum Débuter
    Réponses: 5
    Dernier message: 15/12/2008, 16h01
  5. Requête permettant de lister les enregistrements inexistants
    Par orionsofia24 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/10/2008, 04h49

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