如果列返回null结果,请检查MySQL中的另一列

时间:2015-12-10 14:24:56

标签: mysql sql

我在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);

3 个答案:

答案 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 nullis 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')