2010-12-13 11 views

Répondre

2

en supposant que vous vouliez dire "existe dans une table ou l'autre table, mais pas dans les deux tableaux" - vous utilisez un sous-requêtes et union select!

SELECT name FROM table_one WHERE id NOT IN (SELECT id FROM table_two) 
UNION SELECT name from table_two WHERE id NOT IN (SELECT id FROM table_one); 

Aussi, si vous vouliez les résultats à regrouper pour vous en une seule ligne de résultat:

SELECT group_concat(x.name) FROM 
    (SELECT name FROM table_one 
     WHERE id NOT IN (SELECT id FROM table_two) 
    UNION SELECT name from table_two 
     WHERE id NOT IN (SELECT id FROM table_one)) as x; 
0

Ce serait simple si MySQL avait un opérateur FULL OUTER JOIN: une telle jointure retourne une ligne pour chaque enregistrement dans chaque table, joint sur l'ID si un enregistrement existe des deux côtés, NULL sur le côté inexistant sinon. Vous pourriez alors faire la même vérification @ajreal suggère des deux côtés de la jointure.

Au lieu de cela, vous pouvez UNION les résultats d'une gauche et droite JOIN ...

SELECT table_one.name 
FROM table_one 
LEFT JOIN table_two ON table_one.id = table_two.id 
WHERE table_two.id IS NULL 
UNION 
SELECT table_two.name 
FROM table_one 
RIGHT JOIN table_two ON table_one.id = table_two.id 
WHERE table_one.id IS NULL 
+0

oui, une union est la clé – vicatcu

+0

A part le désir d'équilibre, les soins de quelqu'un pour expliquer pourquoi cela a été downvoted? –