[英]Join or Sub-query to “detect missing records”?
我正在努力使此查询正常工作。
我有2个表,其中包含一个国家代码为“ US”或“ AU”或“ JP”-这是一个公共键。
SELECT DISTINCT cc FROM geo_world; SELECT cc FROM geo_country;
注意:geo_world是一个大型表,具有数百万个条目,但只有124个不同的cc值。
注意:geo_country仅包含244 cc值。
我想找出geo_world中未显示的cc值。 应该有120个。
谢谢-我尝试了加入,但没有得到结果。
原则上,任何这些都应该起作用:
SELECT cc
FROM geo_country
WHERE cc NOT IN
( SELECT cc -- or SELECT DISTINCT cc
FROM geo_world
)
;
SELECT cc
FROM geo_country
WHERE NOT EXISTS
( SELECT 1
FROM geo_world
WHERE cc = geo_country.cc
)
;
SELECT geo_country.cc
FROM geo_country
LEFT
OUTER
JOIN geo_world
ON geo_world.cc = geo_country.cc
WHERE geo_world.cc IS NULL -- i.e., the join failed
;
但是,您必须尝试让他们看看哪个效果最好。
SELECT DISTINCT cc
FROM geo_world
WHERE cc NOT IN (SELECT cc FROM geo_country)
一些注意事项:
geo_world
的索引包含cc
您可以使用NOT EXISTS条件。 您可以这样做:
SELECT cc FROM geo_country WHERE
NOT EXISTS (SELECT * from geo_world WHERE geo_world.cc = geo_country.cc);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.