2016-07-19 112 views
-1

是否有可能根據某些條件進行更改where子句的查詢?例如,我想從table1中選擇*,其中數據是19/July/2016,但如果字段ID爲null,則不執行任何操作,否則將id與其他值進行比較。像下面的查詢一樣?MySQL如果在Where子句

Select * from table1 where date="2016-07-19" if(isnull(id),"",and id=(select * from ...)) 
+0

好的,我看到兩個答案,一個是我的,用不同的方式解釋了你想要的。所以,你可能想編輯這個問題來澄清你的意思是「什麼都不做」。 – MAP

回答

0

是的。這應該是可能的。

如果我們假設dateid中(該不幸命名)表引用table1,如果我理解你正在試圖達到什麼樣的,我們可以寫像查詢這樣的:

SELECT t.id 
     , t.date 
     , t.... 
    FROM table1 t 
    WHERE t.date='2016-07-19' 
    AND ( t.id IS NULL 
     OR t.id IN (SELECT expr FROM ...) 
     ) 

這也有可能納入MySQL的IF()IFNULL()功能,如果有一定的要求做。

只要在語句提交到數據庫後動態更改SQL語句的文本,不,這是不可能的。在生成SQL語句時,需要完成對SQL文本的任何動態更改,提交給數據庫。

我的個人偏好是使用連接操作而不是IN (subquery)謂詞。

0

我想你太努力了。如果id是NULL,這相當於where子句中有FALSE。所以:

Select * from table1 where date="2016-07-19" and id=(select * from ...) 

應該只匹配你想要的記錄。如果idNULL,你什麼也得不到。