【问题标题】:SQL Inner Join Order [duplicate]SQL内部连接顺序[重复]
【发布时间】:2017-07-31 18:00:56
【问题描述】:

如果我有一个表A,主键w,表B,主键x,外键引用A.w,称为y,还有一个字段z。以下查询有什么区别:

SELECT w, x, y, z FROM A INNER JOIN B ON A.w = B.y WHERE B.z = SomeValue

SELECT w, x, y, z FROM B INNER JOIN A ON A.w = B.y WHERE B.z = SomeValue

如果B.zB.y是复合主键,还有区别吗?

如果“更标准”的代码没有区别?

【问题讨论】:

  • 这两个查询没有区别。 inner join 的操作数顺序不影响结果,也不应该影响执行计划。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 要找出有任何影响的if,检查执行计划。
  • @a_horse_with_no_name 重复是错误的,问题是关于 1 个连接的参数顺序(交换性),但重复是关于多个连接的顺序(关联性)。 (我正在寻找合适的副本,请告诉我你有一个。迄今为止最旧的只有 2013 stackoverflow.com/q/19612208/3404097。)

标签: sql


【解决方案1】:

两个给定查询之间没有区别。对于 INNER 连接,不,顺序无关紧要。对于(LEFT、RIGHT 或 FULL)OUTER 连接,是的,顺序很重要。

详情请参阅this 话题。

【讨论】:

  • 他们中的任何一个会是更好的编程风格吗?
  • 请看我更新的答案。 :)
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多