我的查询是基本的,如下所示:SELECT ID FROM Table WHERE CRIT1='a' AND CRIT2='b' AND CRIT3='c'
然而,它有时不返回任何值。这是正常的,因为表中没有匹配项。
为了帮助我的用户找到哪些条件过于严格,我想找到另一个查询,它告诉我是否因为 CRIT1、CRIT2 或 CRIT3 子句我没有答案。
目前,我已经这样做了(使用伪代码):
If ( SELECT ID FROM Table WHERE CRIT1='a' returns EOF )
Then WrongCriteria="CRIT1"
Elseif ( SELECT ID FROM Table WHERE CRIT1='a' AND CRIT2='b' returns EOF )
Then WrongCriteria="CRIT2"
Elseif ( SELECT ID FROM Table WHERE CRIT1='a' AND CRIT2='b' AND CRIT3='c' returns EOF )
Then WrongCriteria="CRIT3"
它有效......但是有几个查询,由于网络响应时间很短,每个查询都非常慢。
我的问题是:可以在一个 SQL 查询中执行上述伪代码吗?
最佳答案
您可以通过在条件上使用 SUM
将三个查询合并为一个:
SELECT
SUM(CASE WHEN CRIT1='a' THEN 1 ELSE 0 END) as CRIT1
, SUM(CASE WHEN CRIT1='a' AND CRIT2='b' THEN 1 ELSE 0 END) as CRIT2
, SUM(CASE WHEN CRIT1='a' AND CRIT2='b' AND CRIT3='c' THEN 1 ELSE 0 END) as CRIT3
FROM MyTable
列中的零对应于限制性标准。
请注意,这只是您的三个查询的不同实现,它以特定方式(crit1 然后 crit2 然后 crit3)“优先”标准。从理论上讲,您希望使用三个标准来测试所有单个标准,以及三个对的组合,即针对这些条件获得六个计数:
CRIT1='a'
CRIT2='b'
CRIT3='c'
CRIT1='a' && CRIT2='b'
CRIT1='a' && CRIT3='c'
CRIT2='b' && CRIT3='c'
以上六项指标将使您全面了解哪些标准过于严格。
关于SQL : finding which clause is making my query returning no answer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47509335/