MySQL内部联接查询以获取其他表中不存在的记录

时间:2012-03-31 09:34:03

标签: mysql

我有表1,all_countries,如下 -

id   |  country
------------------
1    |  USA
2    |  China
3    |  India
4    |  France
5    |  UK
6    |  Australia

我还有表2,supported_countries,作为 -

id   |  country
------------------
1    |  USA
2    |  China

现在我需要一个查询,它会给我包含所有不支持的国家/地区的结果

因此,按照上面的例子我应该

India
France
UK
Australia

我使用以下查询 -

  

SELECT ac.country FROM all_countries ac INNER JOIN supported_countries sc ON sc.country_name!= ac.country_name

它工作正常,除非supported_countries表为空,它不显示任何记录。如何实现这一结果?

4 个答案:

答案 0 :(得分:31)

LEFT JOIN会优雅地做到这一点;

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

演示here

答案 1 :(得分:3)

尝试以下内容:

SELECT * FROM all_countries 
  WHERE country NOT IN (SELECT country FROM supported_countries)

答案 2 :(得分:1)

SELECT ac.country FROM all_countries ac LEFT JOIN supported_countries sc ON sc.country_name = ac.country_name WHERE ISNULL(sc.country_name)

答案 3 :(得分:0)

@Joachim Isaksson提供了线索时,我测试了这个非常相似的查询,并通过替换变量在数据库上工作。

admin/product-nutrients

我提出了一个问题,约阿希姆的回答使我竖起了大拇指。干杯!