我有三个表 AA、BB 和 CC。 BB 和 CC 与表 AA 具有一对一映射(两个表中都有外键列:aa_id)。前提是只有BB或CC中的一个可以引用表AA的一行。
我想从加入 BB 或 CC 的 AA 中选择最新 1000 行。 我可以做单独的查询来选择 500 行分别与 BB 和 CC 连接并制作 1000。但这不能保证我从 AA 表中获取最新的 1000 行。
因此,我提出了以下查询,通过同时加入 BB 和 CC 从 AA 中选择记录。但是由于我的限制(只有 BB 或 CC 可以引用表 AA 的一行),我从下面的查询中得到 0 行。
SELECT * FROM AA
INNER JOIN BB ON (
AA.id = BB.aa_id
AND SOME_CONDITION
)
INNER JOIN CC ON (
AA.id = CC.aa_id
AND SOME_CONDITION
)
ORDER BY
AA.id DESC limit 1000;
你能告诉我怎么做吗?有什么办法可以让我对这两个 JOIN 条件进行 OR 运算吗?
最佳答案
只需将您的 INNER JOIN
更改为 LEFT OUTER JOIN
就可以了。你可能想阅读 this article on codinghorror.com了解不同连接类型的解释。
你的结果应该是这样的:
SELECT * FROM AA
LEFT OUTER JOIN BB ON (
AA.id = BB.aa_id
AND /* SOME_CONDITION */
)
LEFT OUTER JOIN CC ON (
AA.id = CC.aa_id
AND /* SOME_CONDITION */
)
ORDER BY AA.id DESC
LIMIT 1000;
关于mysql - 带 OR 条件的 sql 多重连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051592/