如何在Presto中使用ANSI SQL从给定输入列表获取不存在的记录
在Presto中筛选给定输入里不存在的记录
针对你需要从指定输入值列表中找出country表中不存在的country_code的需求,这里提供两种和你Oracle实现逻辑对齐的Presto解决方案:
方法1:使用VALUES构造临时集 + NOT EXISTS
这种方式和你给出的Oracle代码逻辑最接近,直接构造输入值的临时数据集,再通过子查询判断存在性:
SELECT input.country_code FROM ( VALUES ('AU'), ('IN'), ('ZA'), ('DK'), ('CH'), ('NL') ) AS input(country_code) WHERE NOT EXISTS ( SELECT 1 FROM country c WHERE c.country_code = input.country_code );
方法2:使用LEFT JOIN + IS NULL判断
通过左连接后筛选无匹配的记录,也是Presto中常用的写法:
SELECT input.country_code FROM ( VALUES ('AU'), ('IN'), ('ZA'), ('DK'), ('CH'), ('NL') ) AS input(country_code) LEFT JOIN country c ON c.country_code = input.country_code WHERE c.country_code IS NULL;
如果输入值较多或者需要重复使用,你也可以先把这些值存入临时表,再执行上述的查询逻辑,效果是一样的。
内容的提问来源于stack exchange,提问作者BMD
相关产品推荐
相关产品推荐

