mysql - MySQL WHERE 语句中的可选 AND

标签 mysql left-join

我试图弄清楚如何在有 LEFT OUTER JOIN 的地方允许可选的 AND 语句,因为在查看记录时该表是可选的。但是,我有一个问题,就是没有文件,在 WHERE 语句中,像这样:

SELECT rec.record_id,
       rec.record_name,
       f.file_name,
       f.file_id
FROM
(
    records rec

    LEFT OUTER JOIN files f ON f.record_id = rec.record_id
)
WHERE rec.record_id = 4928 
AND f.file_approved = 1      <-- this is what returns a zero results

当我删除 AND f.file_approved = 1 时,它会返回一条记录,但当我离开它时,它不会返回任何记录。

如果记录不包含文件记录,则不会返回任何内容。我需要它来检查它,如果没有文件,它应该仍然能够返回记录(没有文件)。

最佳答案

尝试将条件移动到连接语句中,这样它只会连接满足条件的行

SELECT rec.record_id,
       rec.record_name,
       f.file_name,
       f.file_id
FROM
(
    records rec

    LEFT OUTER JOIN files f ON f.record_id = rec.record_id AND f.file_approved = 1
)
WHERE rec.record_id = 4928;

关于mysql - MySQL WHERE 语句中的可选 AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245102/

相关文章:

PHP 不再被解析?

r - 多次加入和替换列

mysql - 从 2 个表中获取数据 - 一次有计数,一次没有

java - 方法 createArrayOf 的 mysql JDBC 驱动程序出错

mysql - 涉及计数的非常基本的 SQL 查询

mysql - 过滤表然后连接结果

Mysql - 搜索多个表

php - SQL Join 与子查询计算不同表中具有相同 id 的记录数

mysql - 对多连接表求和

从多个表中进行 SQL SELECT