SQL加入三个表,加入优先级
发布时间:2020-12-12 16:34:04 所属栏目:MsSql教程 来源:网络整理
导读:我有三张桌子:R,S和P. 表R通过外键与S连接;在S中应该有至少一个记录,所以我可以加入: SELECT * FROM R JOIN S ON (S.id = R.fks) 如果在S中没有记录,那么我没有任何行,没关系. 然后表S加入P,其中记录是P可以或可能不存在并与S. 所以我做 SELECT * FROM R JO
我有三张桌子:R,S和P.
表R通过外键与S连接;在S中应该有至少一个记录,所以我可以加入: SELECT * FROM R JOIN S ON (S.id = R.fks) 如果在S中没有记录,那么我没有任何行,没关系. 然后表S加入P,其中记录是P可以或可能不存在并与S. 所以我做 SELECT * FROM R JOIN S ON (S.id = R.fks) LEFT JOIN P ON (P.id = S.fkp) 如果我想要将第二个JOIN绑定到S不是R,如果我可以使用括号,该怎么办? SELECT * FROM R JOIN (S ON (S.id = R.fks) JOIN P ON (P.id = S.fkp)) 还是R,S和P之间笛卡尔积分的自然行为? 解决方法所有类型的外部和正常连接都位于相同的优先级中,并且操作符将在查询的给定嵌套级别从左到右生效.您可以将连接表达式放在右侧的括号中,使其首先生效;只要记住,你必须移动现在加入的连接的ON子句.(PostgreSQL示例) 在SELECT * FROM a LEFT JOIN b ON(a.id = b.id)JOIN c ON(b.ref = c.id); a-b加入首先生效,但是我们可以强制b-c加入,首先要做: SELECT * FROM a LEFT JOIN(b JOIN c ON(b.ref = c.id))ON(a.id = b.id); 通常,您可以通过移动连接并改变外连接方向来表达相同的事情,而不需要额外的括号. SELECT * FROM b JOIN c ON(b.ref = c.id)RIGHT JOIN a ON(a.id = b.id); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |