2009-10-15 74 views
12

我需要合併兩個查詢結果爲聯合,但我只想保持兩個結果之間的差異。這可能嗎?MySQL - 是否有可能獲得兩個查詢結果的「差異」?

我基本上選擇查詢1中的所有資源和查詢2中的NOT-ALLOWED資源,我顯然需要我最後一個結果中的允許資源。

在pseodo代碼:

Query1 - Query2 

QueryResult中1:

+-------+ 
| id | 
+-------+ 
| 1 | 
+-------+ 
| 2 | 
+-------+ 
| 3 | 
+-------+ 
| 4 | 
+-------+ 
| 5 | 
+-------+ 
| 6 | 
+-------+ 

QueryResult中2:

+-------+ 
| id | 
+-------+ 
| 2 | 
+-------+ 
| 5 | 
+-------+ 

需要:

+-------+ 
| id | 
+-------+ 
| 1 | 
+-------+ 
| 3 | 
+-------+ 
| 4 | 
+-------+ 
| 6 | 
+-------+ 
+0

要求尚不清楚。文本解釋提到採取所有查詢1,但後來的例子與此相矛盾。我們試着單純通過這個例子來定義這個需求。如果query2有7或0,這些值是否會包含在差異中? – mjv 2009-10-15 02:42:28

+1

我會同意標題與問題主體不一致,但問題本身非常明確。 OP要求減法:所有非「不可用」的資源:'A - B' – nickf 2009-10-15 03:59:27

+0

一分鐘後,我以爲他要求減去查詢1字段值來查詢2字段值。 – putolaruan 2009-10-15 07:33:31

回答

40

這樣,使用NOT IN

SELECT id FROM queryOneTable 
WHERE id NOT IN (
    SELECT id FROM queryTwoTable 
) 
+1

中,那麼它將永遠不會在QUERY2中變得如此簡單,但仍然如此:) – Ropstah 2009-10-15 13:36:39

4

我的SQLExpress測試此查詢,因爲我沒有MySQL的。我假設它以同樣的方式工作。

select x.id 
from x 
left join y on x.id = y.id 
where y.id is null 
+0

它應該是'select x.id' – 2012-03-13 13:21:40

1

的左連接的方法是更加靈活,因爲你可以在兩個表(或任意兩個查詢結果集),其中唯一不是由一個 ID,但幾個列值的組合的使用它。此外,它被認爲是更好的SQL(或至少它曾經是)掌握外連接(左邊),因爲它比編寫嵌套選擇更高效。