CASE
是一種可能性。但更短的寫會IF()
(與MySQL至少):
SELECT *, IF(COND2, 1, 0) AS cond2, IF(COND3, 1, 0) as cond3 ...
每cond*
匹配的,如果它的值是1
。
當然,檢查COND1
是否匹配沒有意義。對於你回來的所有結果,COND1
是正確的。所以IF(COND1, 1, 0)
將永遠返回1
(在你的例子中)。
更新:
再次至少爲MySQL,我發現,那下面就足夠了,如果你只是想獲得任意1
或0
的結果是:
SELECT *, COND2 AS cond2, COND3 as cond3 ...
,並且相對於馬克的回答,你能避免寫條件的兩倍,如果使用HAVING
代替WHERE
(HAVING
機會獲得別名):
SELECT *, COND2 AS cond2, COND3 as cond3
FROM table
HAVING COND1 AND (cond2 OR cond3)
(注:大寫字母表示的實際情況表達和小寫的是別名)
更新2:
那麼它的變化並不多:你只需要檢查通過OR
連接條件在您的更新版本中,檢查COND2
是否爲真即可。如果是這樣,那麼COND3
也是如此,反之亦然。
SELECT *, COND1 AS cond1, COND2 as cond2, COND4 as cond4
FROM table
HAVING cond1 OR (cond2 AND COND3) OR cond4
我認爲這一點很清楚。
這是一個有趣的解決方案 – Amirshk 2010-02-14 12:18:54
是啊,就像我說的,更多的是理論問題... – Amirshk 2010-02-14 12:22:06
+1:「檢查COND1是否匹配沒有意義」有關查詢的推理比黑客周圍更有幫助。針對COND1 AND COND2以及COND1和COND3運行兩個單獨的查詢,您將學到很多。 – 2010-02-14 12:22:38