CASE
是一种可能性。但写起来会更短IF() http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if(至少对于MySQL):
SELECT *, IF(COND2, 1, 0) AS cond2, IF(COND3, 1, 0) as cond3 ...
和每一个cond*
如果其值为1
.
当然,检查是否存在是没有意义的COND1
匹配与否。对于您返回的所有结果,COND1
是真的。所以IF(COND1, 1, 0)
总会回来的1
(在你的例子中)。
Update:
至少对于 MySQL,我发现,如果您只想获得其中一个,那么以下内容就足够了1
or 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
我认为这一点很清楚。