我正在尝试执行类似于此的查询:
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/