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 MySQL Discussion :

Requête mysql difficile


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par défaut Requête mysql difficile
    voire impossible, mais j'y crois pas

    Je me permet de vous soumettre un problème, je précise c'est un problème qui peut être très facilement résolu avec l'aide de php, mais j'aurais aimé obtenir le même résultat avec juste un requête mysql, question de simplification (et de challenge)

    Voilà, j'ai deux tables, une table de données et une table de liens, et j'aimerais récupérer de la première table, les données qui ne sont PAS liées à la seconde.

    Voici la structure de la chose :

    TABLE A

    id / nom / type

    TABLE B

    id1 / id2

    - c plutôt simple -

    certains enregistrements de la table A peuvent être liés aux autres enregistrements de la même table et donc, j'aimerais récupérer les enregistrement qui n'ont pas encore été liées à un enregistrement en particulier.

    En fait dans id2 de B, il ne peut y avoir que certains enregistrements de A, définis par la colonne type.

    Voilà, je ne sais pas si j'ai été clair, si vous voulez plus de détails n'hésitez pas.

    Merci d'avance.

  2. #2
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    Un truc du genre devrait marcher, apres y'a surement plus joli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from A WHERE type NOT IN (SELECT id2 FROM B)

  3. #3
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    Pour le faire proprement en MYSQL il faut utiliser une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * 
    FROM t1
    LEFT  JOIN t2 ON t1.id = t2.id
    WHERE t2.id IS NULL

  4. #4
    Membre éclairé Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    Pour le faire proprement en MYSQL il faut utiliser une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * 
    FROM t1
    LEFT  JOIN t2 ON t1.id = t2.id
    WHERE t2.id IS NULL
    Merci, mais déjà essayer. Le SELECT sans le WHERE donne les résultats sur les autres enregistrement liés, il n'y donc aucun résultat NULL.

  5. #5
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 169
    Par défaut
    Citation Envoyé par daajack Voir le message
    Merci, mais déjà essayer. Le SELECT sans le WHERE donne les résultats sur les autres enregistrement liés, il n'y donc aucun résultat NULL.
    Non, ca devrait marcher aussi celle la, tu avais bien mis le LEFT?

  6. #6
    Membre éclairé Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par défaut
    Citation Envoyé par kangaxx Voir le message
    Non, ca devrait marcher aussi celle la, tu avais bien mis le LEFT?
    Oui, mais les enregistrements pouvant être liés aux autres (dans id2 donc) étant tous liés à au moins un enregistrement, il n'y a que les enregistrements liés qui apparaissent.

  7. #7
    Membre éclairé Avatar de daajack
    Inscrit en
    Octobre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 97
    Par défaut Pas mal
    Effectivement ça marche, même si c pas top-classe, mais au moins ça simplifie, merci beaucoup.

    Petite rectification cependant :
    SELECT * FROM A WHERE id NOT IN (SELECT id2 FROM B WHERE id1 = X) AND type = Y

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

Discussions similaires

  1. Requète MySQL >> Postgresql
    Par genova dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/08/2005, 09h05
  2. Requête MYSQL LIKE particulière
    Par TheDarkLewis dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/12/2004, 15h50
  3. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  4. surcharge de requête MySQL
    Par simoryl dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2004, 10h43
  5. requête mysql sous php
    Par remi59 dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2003, 10h39

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