加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 多个左连接在一个查询中的多个表

发布时间:2020-12-12 16:15:55 所属栏目:MsSql教程 来源:网络整理
导读:我有一个主表,其中存储有多个级别的项目,父母和子项,并且还有一个第二个表可能有也可能没有其他数据.我需要从我的主表中查询两个级别,并在第二个表中添加一个左侧的连接,但是由于我的查询中的排序将不起作用. SELECT something FROM master as parent,master
我有一个主表,其中存储有多个级别的项目,父母和子项,并且还有一个第二个表可能有也可能没有其他数据.我需要从我的主表中查询两个级别,并在第二个表中添加一个左侧的连接,但是由于我的查询中的排序将不起作用.
SELECT something FROM master as parent,master as child
  LEFT JOIN second as parentdata ON parent.secondary_id = parentdata.id
  LEFT JOIN second as childdata ON child.secondary_id = childdata.id
WHERE parent.id = child.parent_id AND parent.parent_id = 'rootID'

左连接只适用于from子句中的最后一个表,所以我只能使其在左连接之一工作.在上面的例子中,左连接不会工作,因为第一个左连接指向from子句中的第一个表,第二个连接将永远不会这样工作.

我该怎么做这个工作?

解决方法

这种查询应该工作 – 在用现代ANSI JOIN语法重写之后:
SELECT something
FROM   master      parent
JOIN   master      child ON child.parent_id = parent.id
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  parent.parent_id = 'rootID'

这里的跳线是明确的JOIN在“旧样式”CROSS JOIN之前用逗号(,)绑定. I quote the manual here:

In any case JOIN binds more tightly than the commas separating
FROM-list items.

重写第一个后,所有连接都将从左到右应用,它可以正常工作.

只是为了说明这一点,这也可以起作用:

SELECT something
FROM   master parent
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id,master child
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  child.parent_id = parent.id
AND    parent.parent_id = 'rootID'

但是,通常优选显式的JOIN语法,如您的例子所示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读