-1

我有 2 个表 Table1

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

4 回答 4

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
        );

SQL Fiddle 示例

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

然而,值得注意的是,在 MySQL 中LEFT JOIN/IS NULL 通常性能优于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;

SQL Fiddle 示例

于 2013-06-25T13:46:05.783 回答
1

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

SELECT * 
FROM table1 
LEFT JOIN table2 ON table2.AnimalName = table1.AnimalName 
WHERE table2.AnimalName IS NULL
于 2013-06-25T13:46:33.923 回答
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
于 2013-06-25T13:47:41.157 回答
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

我正在对两列进行左连接,因为谁知道数据的质量,并且有多个动物名称相同,但 ID 不同……例如与宠物主人关联的 ID。

于 2013-06-25T13:48:01.040 回答