SQL 错误 -- 如何在 Redshift 中使用“(field IN (SELECT col from Table) OR (field IS NULL))”

SQL error -- how to use "(field IN (SELECT col from Table) OR (field IS NULL))" in Redshift

提问人:Marcio Buss 提问时间:9/3/2023 更新时间:9/3/2023 访问量:55

问:

我在 Redshift 中收到一个错误,逻辑上规定它不应该发生。代码非常简单:

SELECT field1, field2
FROM table T
WHERE condition1
  AND condition2
  AND (T.field3 IN (SELECT col FROM T2) OR T.field3 IS NULL)

这会产生一个错误,其上下文读取 context:query->a_last_plan()->m_locus == LocusXNode。

但是,如果我稍微调整上面的代码并使用:

SELECT field1, field2
FROM table T
WHERE condition1
  AND condition2
  AND (T.field3 IN ('a', 'b', 'c') OR T.field3 IS NULL)

然后事情就开始了。我不能诉诸这种诡计,因为我需要比较 T.field3 的值不是固定的,它们确实是行可能会更改的表的一部分。

我已经检查了数据类型和

(SELECT col FROM T2)

具有与 T.field3 数据类型完全相同的“col”。

现在,我正在求助于一个不优雅的解决方案,即将一个假的“null”值(“unik_null_value”)添加到 T2 中,然后使用合并:

(coalesce(T.field3,'unik_null_value') IN (SELECT col FROM T2))

然而,这是一个相当大的黑客,并在 T2 中增加了一个不需要的值。 非常感谢任何支持,谢谢。

sql null amazon-redshift

评论

0赞 nbk 9/3/2023
阅读手册的逻辑口述,你会发现它没有得到支持
0赞 Marcio Buss 9/3/2023
谢谢@nbk -- 对可能的优雅解决方案有什么方向吗?
0赞 nbk 9/3/2023
使用 (INNER) JOIN
0赞 Marcio Buss 9/3/2023
INNER JOIN 将不起作用,因为 T2 中没有 NULL 值,因此我想在“OR”子句中考虑的术语(T.field3 为 NULL)不会对 JOIN 产生任何影响
0赞 nbk 9/3/2023
UNION 第二个 SELECT 与WHERE condition1 AND condition2 AND T.field3 IS NULL

答: 暂无答案