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:
重写第一个后,所有连接都将从左到右应用,它可以正常工作. 只是为了说明这一点,这也可以起作用: 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语法,如您的例子所示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |