【发布时间】:2022-01-18 17:20:26
【问题描述】:
我在 DataCamp 上做一个挑战题。它使用两个表,“经济”包含按国家/地区代码划分的经济信息,“国家/地区”包含按国家/地区代码划分的一般国家/地区信息。
挑战是:从“经济”表中获取 2015 年的国家代码、通货膨胀率和失业率,其中 gov_form 在“国家”表中不是“Constitutional Monarchy”或“%Republic%”。
使用 LEFT JOIN 我得到 20 个结果:
SELECT e.code, e.inflation_rate, e.unemployment_rate, c.gov_form
FROM economies AS e
LEFT JOIN countries AS c
ON c.code = e.code
WHERE c.gov_form <> 'Constitutional Monarchy'
AND c.gov_form NOT LIKE '%Republic%'
AND e.year = 2015
ORDER BY e.inflation_rate;
使用子查询我得到 26 个结果:
SELECT code, inflation_rate, unemployment_rate
FROM economies
WHERE year = 2015 AND code NOT IN
(SELECT code
FROM countries
WHERE (gov_form = 'Constitutional Monarchy' OR gov_form LIKE '%Republic%'))
ORDER BY inflation_rate;
似乎JOIN版本排除了“国家”表中不存在的国家(它们只存在于“经济”表中),例如ROU(罗马尼亚)。但是,我认为左侧带有“经济”的 LEFT JOIN 将包括该表中的所有行,并且无论它们是否存在于右表中都不会删除它们?
感谢任何建议。
【问题讨论】:
标签: sql join subquery left-join