我正在阅读 Redshift 中的 SQL 查询,但无法理解最后一部分:
...
LEFT JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
ON 1=1
ON 1=1
在这里是什么意思?
原文由 kee 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在阅读 Redshift 中的 SQL 查询,但无法理解最后一部分:
...
LEFT JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
ON 1=1
ON 1=1
在这里是什么意思?
原文由 kee 发布,翻译遵循 CC BY-SA 4.0 许可协议
意图是 无条件 的 LEFT JOIN
,它与 CROSS JOIN
的 不同 之处在于返回左表表达式中的所有行,即使右表表达式中没有匹配项 - 而a CROSS JOIN
从结果中删除此类行。 更多关于加入手册。
然而:
1=1
在 Postgres 和包括 Amazon Redshift 在内的 所有衍生产品 中毫无意义。只需使用 true
。这可能是从另一个不正确支持 boolean
类型的 RDBMS 继承而来的。
... LEFT JOIN (SELECT ...) ue ON true
Then again, LEFT JOIN
is pointless for this particular subquery with SELECT MIN(modified) FROM user
on the right, because a SELECT
with an aggregate function ( min()
)并且没有 GROUP BY
子句总是只返回一行。这种情况(但不是其他可能找不到 行 的情况)可以简化为:
... CROSS JOIN (SELECT MIN(modified) AS first_modified FROM user) ue
原文由 Erwin Brandstetter 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
3 回答2.3k 阅读
2 回答946 阅读
1 回答1.7k 阅读
它只是做一个交叉连接,从第一个表中选择所有行,从第二个表中选择所有行,并显示为笛卡尔积,即具有所有可能性。
JOIN(LEFT、INNER、RIGHT 等)语句通常需要一个“ON …”条件。输入 1=1 就像是在说“1=1 始终为真,不要消除任何东西”。