加入(选择...) ue ON 1=1?

新手上路,请多包涵

我正在阅读 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 许可协议

阅读 948
2 个回答

它只是做一个交叉连接,从第一个表中选择所有行,从第二个表中选择所有行,并显示为笛卡尔积,即具有所有可能性。

JOIN(LEFT、INNER、RIGHT 等)语句通常需要一个“ON …”条件。输入 1=1 就像是在说“1=1 始终为真,不要消除任何东西”。

原文由 Buddy Yaussy 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进