如何编写SQL - 检查A5或者如果不存在那么A6和A7

时间:2016-02-25 09:04:09

标签: sql sql-server

我有一个SQL代码,可以打印缺少特定附件的消息。

例如,伪代码如下: -

SELECT 'A1' AS MSG WHERE NOT EXISTS (SELECT ...)
UNION    
SELECT 'A2' AS MSG WHERE NOT EXISTS (SELECT ...)
UNION
SELECT 'A3' AS MSG WHERE NOT EXISTS (SELECT ...)
UNION
SELECT 'A4' AS MSG WHERE NOT EXISTS (SELECT ...)

我将所有这些消息存储在"," 附加格式的变量中,我将进一步用于打印。

现在我希望与一个条件消息结合,检查A5或者如果不存在则检查A6和A7。

我尝试编码场景,但没有运气。我怎样才能做到这一点?

请帮忙。

谢谢,

1 个答案:

答案 0 :(得分:1)

当A5或A6 + A7存在时,它是可以的:

Okay = EXISTS(A5) OR ( EXISTS(A6) AND EXISTS(A7) )

这转换为:

Not okay = NOT EXISTS(A5) AND ( NOT EXISTS(A6) OR NOT EXISTS(A7) )

在查询中:

UNION
SELECT 'A5+A6/A7' AS MSG WHERE NOT EXISTS (<A5 query>)
                         AND ( NOT EXISTS(<A6 query>) OR NOT EXISTS(<A7 query>) )

所以你告诉DBMS 要检查什么,但是你无法真正告诉它以什么顺序执行它。如果DBMS认为这比从A5检查开始表现更好,则可以决定首先进行A6测试。但这不是我们应该担心的。对我们来说重要的只是获得正确的结果。找到最佳执行路径不是我们的业务。