我的查询是基本的,如下所示:
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查询中执行上述伪代码吗?
答案 0 :(得分:3)
您可以在条件:{/ p>上使用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'
以上六项计数可以让您全面了解哪些标准过于严格。
答案 1 :(得分:2)
是的,可以使用“ OR ”运算符在单个查询中执行此检查。 我假设它只是一个条件,一次可能出错:
SELECT CASE WHEN CRIT1 <> 'a' THEN 'CRIT1'
WHEN CRIT2 <> 'b' THEN 'CRIT2'
WHEN CRIT3 <> 'c' THEN 'CRIT3' END AS WrongCriteria
FROM Table WHERE CRIT1<>'a' OR CRIT2<>'b' OR CRIT3<>'c'