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

标签 mysql sql sql-server join left-join

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

  • 主表
  • 项目表
  • 对象表

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/

相关文章:

php - 一个表单可以执行两次吗?

mysql - 使用 Memcache 设置 MySQL 5.6 失败且没有错误

sql-server - 将 SP 返回值设置为 SQL Server 中的变量

sql - 如何选取n组所有记录?

mysql - 我怎样才能使用MySQL得到以下结果

php - 初始化然后增加记录集的行号,如果

sql - Google Sheet 查询 - 来自另一个查询的 WHERE 子句

php - 如何设置 IIS、MS SQL 服务器来显示我的 PHP 错误

mysql - 使用 INNER JOIN 显示所有记录

sql-server - 区分大小写变得疯狂