我的查询是基本的,如下所示:
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/

    10-11 03:32