内部连接查询mysql

时间:2013-06-25 13:39:49

标签: mysql sql inner-join

我有2张桌子  表1

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

表2

ID AnimalNAme  
1  Dog1    
2  cat1   
3  Cow1   
4  Rat2  

我需要输出

1 Dog2  
3 Cow2   
4 Rat1   

4 个答案:

答案 0 :(得分:3)

我认为您正在寻找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

这将返回table1中表2中不存在的所有行。

但值得注意的是,在MySQL LEFT JOIN/IS NULL generally performs better而不是NOT EXISTS,并且具有相同的效果。通过声明OUTERTABLE.Column IS NULL您将查询限制为外表中没有相应项的行。

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

答案 1 :(得分:1)

这可能不是最佳选择,但您可以尝试以下查询:

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

答案 2 :(得分:1)

左连接并检查不匹配?

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

答案 3 :(得分:1)

由于您的问题没有准确说明,我只能通过提供的数据进行猜测。如何获得第一张表中而不是第二张表中所有动物的列表。

对要比较的表执行左连接,并在第二个表中检查NULL。

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

我正在BOTH列上进行左连接,因为谁知道数据的质量并且具有相同名称的多个动物名称,但是在不同的ID下...例如与宠物所有者相关联的ID。