2013-07-20 49 views
0

嗨什麼,我試圖實現是在具有動態列名稱的查詢太多行,其中取決於列是否爲空或不是條款。案例子查詢返回內where子句

因此,作爲一個例子,如果某行的預約時間是不爲空,where子句將是:

WHERE `Building ID` = '1' and `Appointment Date`='2013-10-10' ; 

而且如果預約時間爲null,where子句將是:

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' 
+0

您可以用'LIMIT'這樣的:'選擇當預約時間不等於零時,預約時間 其他備份結束日期從以往的工作WHERE房屋編號=「1的情況下'LIMIT 1)' –

+0

建築ID是唯一的嗎?我認爲你在表格中有多個Building ID。否則,它不應該返回超過1行。 – Learner

回答

1
SELECT `Job ID` 
FROM jobs 
WHERE `Building ID` = '1' 
and case when `Appointment Date` IS NOT NULL 
     then `Appointment Date` = '2013-10-10' 
     else `Backup Date` = '2013-10-10' 
    end 
+0

非常感謝,擺脫子查詢讓它工作。 – Sam

1

使用COALESCE()功能。它返回其不爲空的第一個參數。

WHERE `Customer ID` = '1' and COALESCE(`Appointment Date`, `Backup Date`) ='2013-10-10' ; 
0

試試這個:

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'))