2013-06-25 6 views
-1

Im avoir 2 Tables Tableau 1jointure requête pour MySQL

ID AnimalNAme 
1 Dog1  
1 Dog2  
2 cat1 
3 Cow1 
3 Cow2  
4 Rat1  
4 Rat2 

Tableau 2

ID AnimalNAme 
1 Dog1  
2 cat1 
3 Cow1 
4 Rat2 

Je dois sortie

1 Dog2 
3 Cow2 
4 Rat1 
+0

Quelle est la condition pour la sortie désirée? Il n'y a pas de condition claire pour filtrer la liste dans la sortie. – Bere

+0

son erreur fine de travail que je faisais était iwas utilisant jointure gauche et j'avais donné Table1.AnimalName! = Table2.AnimalName et n'a pas indiqué "WHERE Table2.ID IS NULL" – vishu

Répondre

3

Je pense que vous cherchez NOT EXISTS:

SELECT ID, AnimalName 
FROM Table1 
WHERE NOT EXISTS 
     ( SELECT 1 
      FROM Table2 
      WHERE Table1.ID = Table2.ID 
      AND  Table1.AnimalName = Table2.AnimalName 
     ); 

Example on SQL Fiddle

Ceci renverra toutes les lignes de table1 qui n'existent pas dans le tableau 2.

Il est cependant intéressant de noter que dans MySQL LEFT JOIN/IS NULLgenerally performs better que NOT EXISTS, et a le même effet. En déclarant que OUTERTABLE.Column IS NULL vous limitez la requête aux lignes où il n'y a aucun élément correspondant dans la table externe.

SELECT Table1.ID, Table1.AnimalName 
FROM Table1 
     LEFT JOIN Table2 
      ON Table1.ID = Table2.ID 
      AND Table1.AnimalName = Table2.AnimalName 
WHERE Table2.ID IS NULL; 

Example on SQL Fiddle

+0

Rat2 Existe dans les deux tables, – Bere

+0

@Bere Exactement, le la sortie requise contient uniquement les éléments figurant dans la table1 et ** NOT ** dans la table2 – GarethD

1

Il peut être pas la meilleure option, mais vous pouvez essayer la requête suivante:

SELECT * 
FROM table1 
LEFT JOIN table2 ON table2.AnimalName = table1.AnimalName 
WHERE table2.AnimalName IS NULL 
1

jointure gauche et vérifier pour les matchs non?

SELECT 
FROM Table1 a 
LEFT OUTER JOIN Table2 b 
ON a.ID = b.ID 
AND a.AnimalName = b.AnimalName 
WHERE B.ID IS NULL 
1

Étant donné que votre question ne dit pas exactement, je ne peux que deviner les données fournies. Comment puis-je obtenir une liste de tous les animaux qui sont dans la première table et pas dans la seconde.

Effectuez une jointure à gauche vers la table que vous comparez et effectuez une vérification de la valeur NULL dans la deuxième table.

select 
     t1.id, 
     t1.animalName 
    from 
     Table1 t1 
     left join table2 t2 
      on t1.id = t2.id 
      AND t1.animalName = t2.animalName 
    where 
     t2.id IS NULL 

que je fais à gauche se joindre à deux colonnes car qui connaît la qualité des données et ayant de multiples noms d'animaux par le même nom, mais sous différents ID ... comme ID associé avec le propriétaire d'un animal de compagnie .