2013-02-27 120 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

相关问题