gpt4 book ai didi

mysql - 将 3 个表连接在一起 - 其中一个表返回空结果。如何在 WHERE 子句中忽略该表?

转载 作者:行者123 更新时间:2023-11-29 07:07:39 25 4
gpt4 key购买 nike

抱歉,如果标题有点令人困惑。基本上,我有三个表:

  • 主表
  • 项目表
  • 对象表

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.StatusOneb.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com