小编典典

SQL:标记哪个WHERE条件匹配

sql

这是一个理论性的问题,我想知道是否存在一种很好的方法来找出WHERE语句中的哪个条件匹配。

说我有一个这样的查询:

SELECT * FROM table WHERE
    COND1 OR
    (COND2 AND COND3) OR
    COND4

有什么方法可以知道哪些条件使给定的行匹配(或不匹配)?


我想到的一种解决方案是在SELECT中添加一个CASE子句,然后为该行重新运行所有WHERE条件:

SELECT *, which_cond = CASE .... END CASE ...

阅读 177

收藏
2021-04-22

共1个答案

小编典典

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而言,我发现,如果您只想获取其中一个10作为结果,则以下内容就足够了:

SELECT *, COND2 AS cond2, COND3 as cond3 ...

对于Mark的答案,如果您使用HAVING代替WHEREHAVING作为对别名的访问权限),则可以避免两次编写条件:

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

我认为这一点很明确。

2021-04-22