Requête SQLite
muqaddar
Administrateur
Salut,
Je manipule SQLite depuis pas mal de temps mais là je sèche sur une requête toute bête.
Je veux obtenir tous les records de la table A qui ne sont pas liés à la table B.
En gros, le contraire de INNER JOIN.
Pour obtenir tous les records de la table 1 qui sont associés à la table 2:
Et bien, je veux le contraire: tous les records de la table 1 sans association.
J'ai regardé du côté de LEFT OUTER JOIN et CROSS JOIN, et même UNION, mais ça n'a pas l'air adapté.
Merci.
Je manipule SQLite depuis pas mal de temps mais là je sèche sur une requête toute bête.
Je veux obtenir tous les records de la table A qui ne sont pas liés à la table B.
En gros, le contraire de INNER JOIN.
Pour obtenir tous les records de la table 1 qui sont associés à la table 2:
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id
Et bien, je veux le contraire: tous les records de la table 1 sans association.
J'ai regardé du côté de LEFT OUTER JOIN et CROSS JOIN, et même UNION, mais ça n'a pas l'air adapté.
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je vasi regarder ça, je ne connaissais pas NOT IN.
Je me réponds à moi-même.
J'ai un peu farfouillé. A priori tous ces opérateurs existent en SQLite. Ma proposition devrait marcher.
J'avais déjà utilisé IN auparavant, mais pas NOT IN.
Merci en tout cas, c'est parfait !
J'ai simplement farfouillé dans la doc SQLite
Du coup par exemple une jointure de type LEFT JOIN devrait te retournes toutes les lignes de la table de gauche, même si elles n'ont pas de correspondance dans la table de droite (et dans ce cas pour les champs de la table de droite, au lieu d'avoir le contenu de la ligne correspondante dans cette table puisqu'il n'en aura pas trouvé, toutes les colonnes seront à NULL).
A partir de là , je pense que tu peux combiner du coup un "table1 LEFT JOIN table2" avec un "WHERE table2.id = NULL" pour ne garder que les lignes de table1 dont il n'y a pas de correspondance dans table2 J'ai pas testé mais ça devrait marcher aussi, et je pense que vu comme en SQL les JOIN sont pas mal optimisés, en tout cas bien plus je pense que les sous-requêtes façon "SELECT dans un SELECT", je pense que ça sera plus efficace.
Bref, j'ai testé dans une requête simple ce que tu dis Ali, ça ne marche pas.
Pas d'erreur de requête, mais ça ne renvoie rien.
J'ai juste modifié "WHERE table2.id = NULL" pour "WHERE table2.id IS NULL"...
Le NOT IN semble être la seule solution pour mon cas.
EDIT: ça a l'air de marcher finalement, il fallait que je jongle avec d'autres champs (status).