SQL加入三个表,加入优先级

前端之家收集整理的这篇文章主要介绍了SQL加入三个表,加入优先级前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三张桌子: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);

原文链接:https://www.f2er.com/mssql/82226.html

猜你在找的MsSQL相关文章