2013-02-27 114 views
1

不存在我有兩個表:獲取記錄在其他表

all_countries

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 1 ║ USA   ║ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 4 ║ France  ║ 
║ 5 ║ UK   ║ 
║ 6 ║ Australia ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 

supported_countries

╔════════════╦═══════════╦═══════════╗ 
║ COUNTRY_ID ║ COUNTRY ║ FILTER_ID ║ 
╠════════════╬═══════════╬═══════════╣ 
║   1 ║ USA  ║   1 ║ 
║   2 ║ China  ║   1 ║ 
║   3 ║ India  ║   1 ║ 
║   4 ║ France ║   2 ║ 
║   1 ║ USA  ║   2 ║ 
║   6 ║ Australia ║   2 ║ 
╚════════════╩═══════════╩═══════════╝ 

查詢:

SELECT a.* 
FROM all_countries a 
LEFT JOIN supported_countries s 
    ON a.id = s.country_id 
WHERE s.country_id IS NULL; 

所以按照上面的例子我應得。

UK 
Philippines 

它工作正常,但如果,如果我過濾國家的例子,我選擇過濾= 2 我會得到什麼結果爲零。

SELECT a.* 
FROM all_countries a 
LEFT JOIN supported_countries s 
    ON a.id = s.country_id 
WHERE s.filter = 2 AND s.country_id IS NULL; 

應該是我想要得到這樣的結果,如果過濾器= 2

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 5 ║ UK   ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 

我做了正確的查詢?

回答

2

添加在ON條款的條件,

SELECT a.* 
FROM all_countries a 
     LEFT JOIN supported_countries s 
      ON a.id = s.country_id AND 
       s.filter_ID = 2  -- <<=== HERE 
WHERE s.country_id IS NULL; 

結果:

╔════╦═════════════╗ 
║ ID ║ COUNTRY ║ 
╠════╬═════════════╣ 
║ 2 ║ China  ║ 
║ 3 ║ India  ║ 
║ 5 ║ UK   ║ 
║ 7 ║ Philippines ║ 
╚════╩═════════════╝ 
+0

獲得更快的性能,就需要對這些列的索引:' a.id','s.country_id','s.filter_ID'。 – 2013-02-27 15:28:36

相關問題