Mysql 在where子句中返回太多行的Case子查询

Mysql 在where子句中返回太多行的Case子查询,mysql,sql,Mysql,Sql,嗨,我试图实现的是一个查询,它在where子句中有一个动态列名,这取决于列是否为null 例如,如果一行的约会日期不为空,where子句将为: WHERE `Building ID` = '1' and `Appointment Date`='2013-10-10' ; WHERE `Building ID` = '1' and `Backup Date`='2013-10-10' ; 如果任命日期为空,则where条款将为: WHERE `Building ID` = '1' and

嗨,我试图实现的是一个查询,它在where子句中有一个动态列名,这取决于列是否为null

例如,如果一行的约会日期不为空,where子句将为:

WHERE `Building ID` = '1' and `Appointment Date`='2013-10-10' ;
WHERE `Building ID` = '1' and `Backup Date`='2013-10-10' ;  
如果任命日期为空,则where条款将为:

WHERE `Building ID` = '1' and `Appointment Date`='2013-10-10' ;
WHERE `Building ID` = '1' and `Backup Date`='2013-10-10' ;  
现在where子句中的子查询返回的行太多,因此查询失败,我应该如何解决这个问题

我的问题如下:

SELECT `Job ID` 
FROM jobs 
WHERE `Building ID` = '1' 
and (select case when `Appointment Date` IS NOT NULL THEN `Appointment Date` 
else `Backup Date` end FROM jobs WHERE `Building ID` = '1') = '2013-10-10'  
使用
COALESCE()
函数。它返回其第一个非空参数

WHERE `Customer ID` = '1' and COALESCE(`Appointment Date`, `Backup Date`) ='2013-10-10' ;
试试这个:

SELECT `Job ID` 
FROM jobs 
WHERE `Building ID` = '1' 
AND ((`Appointment Date` IS NOT NULL AND `Appointment Date` = '2013-10-10') 
      OR
     (`Appointment Date` IS NULL AND `Backup Date` = '2013-10-10'))

您可以这样使用
LIMIT
当约会日期不为空时选择case,然后选择约会日期,否则备份日期从工作结束,其中建筑ID='1'LIMIT 1)
建筑ID是唯一的吗?我认为在一个表中有多个建筑ID。否则它不应该返回超过1行。非常感谢,摆脱子查询后,它就可以工作了。