2011-07-29 49 views
3

我有兩個表具有相同的主鍵,但一個比另一個大得多。我想知道哪個id在較小的表中有一行。 (在這個例子中,a很大,而b很小)。現在,我使用帶CASE的OUTER JOIN來確定b值是否爲NULL。它不工作(總是得到1)。解決這個問題很好,但有一個更好的方法。我應該怎麼做?mysql外部連接 - 確定連接的行是否存在

SELECT a.id, 
     CASE b.id 
     WHEN NULL THEN 0 
     ELSE 1 
     END AS exists 
FROM a LEFT OUTER JOIN b 
    ON a.id=b.id; 

回答

6

這有你什麼表現出相同的邏輯,但有一個較短的代碼:

SELECT a.id,NOT ISNULL(b.id) AS exists 
FROM a LEFT OUTER JOIN b 
    ON a.id=b.id; 
3

號檢查外鍵列(S)一NULL正是你是如何做到這一點。

然而,沒有什麼等於NULL(這不是一個值),這就是爲什麼你的CASE轉到ELSE部分。您需要使用IS NULL來檢查列是否爲NULL

CASE WHEN b.id IS NULL THEN ...