Je dois les tableaux A et B. La relation est un à plusieurs. Dans le tableau B ont une clé étrangère de A.
select TABLE_A.id, COUNT(TABLE_B.f) from TABLE_A JOIN TABLE_B ON (TABLE_A.id = TABLE_B.f) GROUP BY TABLE_A.id HAVING COUNT(TABLE_B.f) = 0;
Comment obtenir tout A sans B?
La requête ci-dessous ne fonctionne pas.
TABLE A: ... fields TABLE B: f = foreignkey(A)
4 Réponses :
Utilisez n'existe pas ?
select a.*
from table_a a
where not exists (select 1
from table_b b
where a.id = b.f
);
Ou pas dans . Ou jointure gauche avec where.
Remplacez JOIN par LEFT JOIN :
TABLE_A.id, COUNT(TABLE_B.f) from TABLE_A LEFT JOIN TABLE_B ON (TABLE_A.id = TABLE_B.f) GROUP BY TABLE_A.id HAVING COUNT(TABLE_B.f) = 0;
Avec cette jointure gauche, vous ne devriez rien compter.
@HaakonDahl, veuillez écrire une requête.
Vous pouvez effectuer un LEFT JOIN et prendre uniquement les lignes qui ont NULL dans la colonne TABLE_B.f ,
signifiant qu'il n'y a pas de TABLE_B.f pour correspondre à TABLE_A.id:
SELECT DISTINCT TABLE_A.id
en supposant que TABLE_A.id code > est unique dans TABLE_A ,
sinon utilisez
SELECT TABLE_A.id FROM TABLE_A LEFT JOIN TABLE_B ON TABLE_A.id = TABLE_B.f WHERE TABLE_B.f IS NULL;
Vous pouvez utiliser la jointure de gauche et vérifier la nullité sur la table de droite.
SELECT TABLE_A.id,count(*) FROM TABLE_A LEFT JOIN TABLE_B ON TABLE_A.id = TABLE_B.f WHERE TABLE_B.f IS NULL group by TABLE_A.id;
La réponse est sélectionnez TABLE_A.id, COUNT (TABLE_B.f) from TABLE_A LEFT JOIN TABLE_B ON (TABLE_A.id = TABLE_B.f) GROUP BY TABLE_A.id HAVING COUNT (TABLE_B.f) = 0;