【问题标题】:What's the difference between a cross join and an inner join with identical filter?交叉连接和具有相同过滤器的内部连接有什么区别?
【发布时间】:2020-02-24 03:26:50
【问题描述】:

让我们看看cross join

select c1, c2, c3
from t1
cross join t2
where t1.f1 = t2.f2

让我们看看inner join

select c1, c2, c3
from t1
inner join t2
on t1.f1 = t2.f2

这两种说法在性能、功能和内存使用方面有什么区别?

【问题讨论】:

    标签: postgresql inner-join cross-join


    【解决方案1】:

    这两个查询在功能上是相同的,如下查询:

    select c1, c2, c3
    from t1, t2
    where t1.f1 = t2.f2
    

    以下是我个人的看法:

    总是使用JOIN ... ON ...JOIN ... USING (...) 语法编写内连接。 优点是:

    1. 读者会立即清楚你在做什么以及连接条件是什么。

    2. 你永远不能忘记写一个连接条件,因为你必须写一个。

      这可以保护您避免因为忘记了一些连接条件而返回 10 亿行而不是 10000 行的查询,这是初学者经常犯的错误。

    另外请注意,虽然对于内部联接,在 JOINWHERE 子句中编写条件并不重要,但对于外部联接很重要。

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2018-01-15
      • 1970-01-01
      • 2023-03-29
      • 2020-06-15
      • 2022-01-12
      • 2012-01-22
      • 2019-05-01
      • 2014-07-06
      相关资源
      最近更新 更多