【发布时间】:2010-09-23 15:56:49
【问题描述】:
我有三个表: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 之间的笛卡尔积的自然行为了吗?
【问题讨论】:
-
您能否详细说明这部分“如果我希望将第二个 JOIN 绑定到 S 而不是 R”现在这些表作为 R 与 S 连接,然后与 P 左连接。跨度>
-
我试图了解是否有一种方法可以优先考虑连接,就像它们是算术运算符一样。我不知道这是否隐含在连接条件中。
-
给我们一个数据示例,说明您希望实现的与普通连接不同的目标,我们可以更好地向您展示该怎么做。派生表可能会执行您想要的操作,但我不确定您到底想要什么。
-
Oracle DB 几乎完全按照您的要求支持括号。
-
继续@DavidBalažic 评论 - 这是相关文档:docs.oracle.com/cd/E17952_01/mysql-5.5-en/…
标签: sql