2013-06-25 143 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與寵物的所有者相關聯。