我在MySQL中有三个表,我想比较第一个table1.columnA和第二个table2.columnB。如果结果为null,我想比较第一个table1.columnA和第三个表(table3.columnC)。什么是在MySQL中编写它的最佳方式?
我试过以下但没有运气
select table1.columnA,table2.columnB, table3.columnC
from table1.columnA
left table2.columnB
on table1.columnA = table1.columnA
left table2.columnB
on table1.columnA = table3.columnC
where ifnull((table1.columnA = table2.columnB), table1.columnA = table3.columnC);
答案 0 :(得分:2)
这样的事情应该有效:
where case when table2.columnB is null then table1.columnA = table3.columnC
else table1.columnA = table2.columnB
end
或者:
where coalesce(table2.columnB, table3.columnC) = table1.columnA
P.S。没有left
,但left join
。
答案 1 :(得分:0)
在MySQL中,至少你必须使用is null
或is not null
检查空值。我还假设"左"你的意思是"左连接",为了查询而包含连接部分很重要,尽管大多数人都会明白你的意思。
您还必须定义要检查的空值。你当前的片段是相当含糊的:它想要一个null从比较中弹出并得到标记,但是当你单独解析它时你真的必须检查null的值。
答案 2 :(得分:0)
简单合并应该可以做到这一点
SELECT COALESCE([tablea].[col1],[tableb].[col1],[tablec].[col1])
FROM [tablea]
LEFT JOIN [tableb] ON [tablea].[col1] = [tableb].[col1]
LEFT JOIN [tablec] ON [tablea].[col1] = [tablec].[col1]
这将返回第一个空值,或者如果找不到则可以有一个默认值
COALESCE([tablea].[col1],[tableb].[col1],[tablec].[col1],'No value')