mysql - 带 OR 条件的 sql 多重连接

标签 mysql sql

我有三个表 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/

相关文章:

mysql - ActiveJDBC 中是否有函数或类可以获取 MySQL 表列名称? (字符串)

mysql - 在 1 where 条件中有 2 个字段

javascript - 动态表单并通过jquery和ajax发送到mysql

mysql - 如何从/var/lib/mysql-files导入数据到MySQL

mysql - 改变mysql数据库设计?

java - Hibernate - 对具有枚举属性的 Bean 使用 native 查询和别名?

sql - 在 Oracle 子查询中获取 order by 后的第一行

php - 更新后台数据库和网站

mysql - 如何检查然后显示两个表的结果并检查存在或不存在?

mysql - 理解加盟