如果我有这个sql:
SELECT A FROM B WHERE C IN
(
SELECT D FROM E
)
如果我的内部选择没有返回任何结果(0行)我的where语句是真还是假?
我正在使用SQL Server
答案 0 :(得分:4)
这是您的查询:
SELECT A
FROM B
WHERE C IN (SELECT D FROM E);
where
语句非常简单。它会过滤掉B.C
和E.D
之间不匹配的行。根据您的声明,没有匹配项,因此会过滤掉所有行。查询不返回任何行。
where
语句通常不是“true”或“false”。 B
中的给定行(在本例中)为“true”或“false”。如果没有匹配项,where
子句将对所有行统一为false。
答案 1 :(得分:1)
暂时忽略这些表,并考虑一下它的作用:
SELECT 'Yes' WHERE 1 IN (SELECT 1 WHERE 1=0)
答案 2 :(得分:0)
两者都没有,如果内部查询没有返回任何行,则不会返回任何结果。从空集中选择任何内容都会为您提供一个空集。 IMO空集既不是真的也不是假的,只有与其他东西相比时才是真的。因此,如果问题是“我会得到任何结果”,那么答案是错误的。