sql - 记录在案的 MySQL 连接可能不存在

标签 sql mysql join

我正在尝试执行类似于此的查询:

SELECT <columns> FROM table1 
INNER JOIN table2 ON table1.id = table2.table1_id
INNER JOIN table3 ON table1.id = table3.table1_id
WHERE table3.column1 != 'foo' AND <other_conditions>
LIMIT 1;

问题是——无论 table3 中的记录是否存在,我都希望查询返回一个结果。也就是说——如果 table3 中的记录存在,我想检查该记录是否具有特定的列值。如果 table3 中的记录 存在,我希望查询假定条件为 TRUE。

有什么建议吗?

最佳答案

您在表上使用左连接。如果不存在相应的记录,表中的值将为空,因此您可以使用 coalesce 来获取可以与字符串进行比较的值:

SELECT <columns> FROM table1 
INNER JOIN table2 ON table1.id = table2.table1_id
LEFT JOIN table3 ON table1.id = table3.table1_id
WHERE COALESCE(table3.column1, '') != 'foo' AND <other_conditions>
LIMIT 1

关于sql - 记录在案的 MySQL 连接可能不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4012353/

相关文章:

ruby-on-rails - 附加参数后 Rails find 不会加入

ruby-on-rails - 创建用户可以加入的 'groups',什么是好的方法?

php - 不允许用户通过查询编辑数据库

mysql - 具有多个不同标准的 UNION SELECT,其中没有真正的 FK

需要php时间戳函数

php - 定期使用表单上传文件到服务器

mysql - 我在哪里可以找到 Linux 中 XAMPP 的 SQL 文件?

mysql - 如何进行有条件的加入?

MySql - 选择第一选择、第二选择、第三选择等的聚合函数?

mysql - 如何让多条记录加入一张表或使用contain with conditions?