正在寻找一种优雅的方法来解决这个问题...
DECLARE @ZIP INT
SET @ZIP = 55555
IF @ZIP = ALL(SELECT ZIP FROM PEOPLE WHERE PERSONTYPE = 1)
PRINT 'All people of type 1 have the same zip!'
ELSE
PRINT 'Not All people of type 1 have the same zip!'
问题是,如果 (SELECT ZIP FROM PEOPLE WHERE PERSONTYPE = 1) 没有返回任何记录,则上述 IF 的计算结果为 true。我正在寻找一种方法,当 ALL 的子查询没有返回记录时,使其计算结果为 false。
我当前的解决方案:
DECLARE @ZIP INT
SET @ZIP = 55555
DECLARE @ALLZIPS TABLE (INT ZIP)
INSERT INTO @ALLZIPS
SELECT ZIP FROM PEOPLE WHERE PERSONTYPE = 1
IF EXISTS(SELECT TOP 1 * FROM @ALLZIPS) AND (@ZIP = ALL (SELECT ZIP FROM @ALLZIPS))
PRINT 'All people of type 1 have the same zip!'
ELSE
PRINT 'Not All people of type 1 have the same zip!'
最佳答案
用途:
IF EXISTS(SELECT NULL
FROM PEOPLE p
WHERE p.persontype = 1
HAVING MIN(p.zip) = @Zip
AND MAX(p.zip) = @Zip)
PRINT 'All people of type 1 have the same zip!'
ELSE
PRINT 'Not All people of type 1 have the same zip!'
关于SQL 和 ALL 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3453236/