抱歉,如果标题有点令人困惑。基本上,我有三个表:
- 主表
- 项目表
- 对象表
MainTable 上的 ID (PK) 是 ItemsTable 和 ObjectsTable 上的外键(因此 MainTable 在我的查询中永远不会返回 null)。
现在的目标是根据 ID 将它们全部连接起来,然后使用所有三个表执行 WHERE 子句。这是查询:
select * from MainTable as a
left outer join ItemsTable as b
on a.ID = b.ID
left outer join ObjectsTable as c
on a.ID = c.ID
where
a.ID = 9999 AND
(a.StatusOne = 1 and b.StatusOne = 1 and c.StatusOne = 1) AND
(a.StatusTwo != 1 or b.StatusTwo != 1 or c.StatusTwo != 1)
该查询的想法是,如果它返回任何结果,则我的代码中的变量将设置为 true,反之亦然。
仅当每个表都有一个 ID 时,此方法才能完美运行。但是,我遇到了 ItemsTable 没有任何具有该 ID 的记录的情况,因此查询没有返回任何结果,当应该有。
我的问题是:
如何忽略 WHERE 子句中的 NULL 连接表?因此,如果 ItemsTable 为 NULL,我仍然想执行条件,只是没有 b.StatusOne
和 b.StatusTwo
最佳答案
将限定语句移至Where 子句使您的左外连接成为INNER 连接。下面就可以工作了。
select * from MainTable as a
left outer join ItemsTable as b
on a.ID = b.ID and b.StatusOne = 1 and b.StatusTwo != 1
left outer join ObjectsTable as c
on a.ID = c.ID c.StatusOne = 1 and c.StatusTwo != 1
where
a.ID = 9999 AND
(a.StatusOne = 1 and
(a.StatusTwo != 1)
关于mysql - 将 3 个表连接在一起 - 其中一个表返回空结果。如何在 WHERE 子句中忽略该表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41041968/