2013-06-25 141 views
-1

林有2个表 表1内连接查询为MySQL

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 
+0

期望输出的条件是什么?没有明确的条件来过滤输出中的列表。 – Bere

+0

其工作正确的错误,我正在做的是iwas使用左连接,我给了Table1.AnimalName!= Table2.AnimalName 并没有指定“WHERE Table2.ID IS NULL” – vishu

回答

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

这将返回所有行不表2

存在table1的它是,但是值得注意的是,在MySQL LEFT JOIN/IS NULLgenerally performs betterNOT 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

+0

Rat2存在于这两个表中, – Bere

+0

@Bere正好,所需输出仅包含table1中的项目,而table2中包含** NOT ** – GarethD

1

可能不是最好的选择,但你可以尝试以下查询:

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

LEFT JOIN和检查非比赛吗?

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

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

对您正在比较的表执行左连接,并在第二个表中检查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与宠物的所有者相关联。