首页 > 解决方案 > SQL - where 子句中的连接字符串未按预期工作 - Redshift

问题描述

这是我指的 SQL (Redshift):

SELECT * 
  FROM table_a
 WHERE col_a||col_b NOT IN 
            (
                SELECT col_a||col_b 
                  from table_b
            );

table_a 中有一些值在 table_b 中不存在,但这总是评估为无行。

有什么见解吗?

标签: sqlamazon-redshift

解决方案


使用NOT EXISTS,不NOT INNOT IN如果子查询中的任何值为NULL. 另外,您通过连接它们来比较多个列。由于冲突,这可能是一个不好的方法:ab/c 匹配 a/bc。

所以使用这个:

SELECT a.* 
FROM table_a a
WHERE NOT EXISTS (SELECT 1
                  FROM table_b b
                  WHERE b.col_a = a.col_a AND b.col_b = a.col_b
                 );

推荐阅读