2009-12-15 72 views
1

我正在使用Access數據庫,並且需要提取多個報告。對於其中的一個,我需要比較兩個數字列表List1和List2(我從兩個單獨的查詢中獲得),並僅顯示List1中但List2中沒有的數字。用於比較的SQL查詢

任何人都可以幫忙嗎? 謝謝。

回答

3

其他人提供了SQL一些很好的答案,但你不妨使用一些內置的訪問功能。

當我在查詢屏幕(在Access XP/2002中,但它應該與Access 2003相同)時,我可以點擊New,然後有一個選項Find Unmatched Query Wizard。這會引導您查看一系列對話框,幫助您設置要查找的查詢。你需要在通過這個嚮導之前已經定義了「List1」和「List2」(在你的例子中)。

完成此設置後,您將能夠看到Access如何創建查詢,這是一種很好的學習方式。

1
SELECT some_value 
FROM table1 
WHERE some_value not in (select some_value from table2); 
+0

子查詢的執行效果不如左連接。 – 2009-12-15 17:25:09

+0

@Sonny Boy:你有這方面的證據嗎? – Heinzi 2009-12-15 17:37:18

+0

檢查您的實際執行計劃。 運行以下是對自己的一個表一個查詢和檢查每個對整個計劃的實際成本: SELECT SOME_VALUE FROM表1 WHERE SOME_VALUE沒有(請從表2 SOME_VALUE) SELECT SOME_VALUE FROM表1 LEFT JOIN表2上table1.ID = table2.ID WHERE table2.ID爲空 – 2009-12-15 18:28:39

0
SELECT * 
FROM (
     SELECT number 
     FROM … 
     ) query1 
WHERE query1.number NOT IN 
     (
     SELECT number 
     FROM … 
     ) /* query2 */ 
+0

子查詢不會像左連接那樣執行。 – 2009-12-15 17:24:38

+0

在'MS Access'中,可能。在'SQL Server'中,'IN'子查詢比''LEFT JOIN'好得多。 – Quassnoi 2009-12-15 17:30:11

+1

據我所知,就查詢性能而言,「IN」與「NOT IN」根本不同。 – Heinzi 2009-12-15 21:53:00

2

爲此,您可以使用LEFT OUTER JOIN

SELECT T1.val 
FROM table1 T1 
LEFT OUTER JOIN table2 T2 ON T1.Val = T2.Val 
WHERE T2.VAL IS NULL;