清空sql语句

时间:2014-02-24 20:07:10

标签: sql sql-server tsql

如果我有这个sql:

SELECT A FROM B WHERE C IN 
(
   SELECT D FROM E
)

如果我的内部选择没有返回任何结果(0行)我的where语句是真还是假?

我正在使用SQL Server

3 个答案:

答案 0 :(得分:4)

这是您的查询:

SELECT A
FROM B
WHERE C IN (SELECT D FROM E);

where语句非常简单。它会过滤掉B.CE.D之间不匹配的行。根据您的声明,没有匹配项,因此会过滤掉所有行。查询不返回任何行。

where语句通常不是“true”或“false”。 B中的给定行(在本例中)为“true”或“false”。如果没有匹配项,where子句将对所有行统一为false。

答案 1 :(得分:1)

暂时忽略这些表,并考虑一下它的作用:

SELECT 'Yes' WHERE 1 IN (SELECT 1 WHERE 1=0)

答案 2 :(得分:0)

两者都没有,如果内部查询没有返回任何行,则不会返回任何结果。从空集中选择任何内容都会为您提供一个空集。 IMO空集既不是真的也不是假的,只有与其他东西相比时才是真的。因此,如果问题是“我会得到任何结果”,那么答案是错误的。