任何人都可以解释为什么在此查询中使用NULL?

时间:2010-03-24 10:54:37

标签: sql

此外,使用此查询的方案是什么

select * from TableA where exists  
    (select null from TableB where TableB.Col1=TableA.Col1)

5 个答案:

答案 0 :(得分:9)

由于查询位于EXISTS中,因此您可以返回任何内容。它甚至没有评估。

实际上,你可以用(1/0)替换null,它甚至不会产生除零错误。

答案 1 :(得分:5)

NULL毫无意义。这简直就是糟糕的SQL。

exists子句应该使用SELECT *

人们编造有关SELECT *费用的故事。他们声称它进行了“额外”的元数据查询。它没有。他们声称这是一个“宏观扩张”,需要大量额外的解析时间。它没有。

答案 2 :(得分:4)

如果子查询返回至少一行,则认为“满足”EXISTS条件。

EXISTS条件的语法是:

SELECT列 FROM表 WHERE EXISTS(子查询);

请注意“从mytable中选择Null”将返回mytable中的行数,但是在单元格中只包含一个null的列,因为外部查询的要求只是检查是否有任何行落在给定的给定条件中在你的情况下它是“TableB.Col1 = TableA.Col1”

您可以将null更改为1,0或表中可用的任何列名。 1/0可能不是一个好主意:)

答案 3 :(得分:3)

这是选择TableA中所有记录的一种俗人方式,TableB中有匹配的记录(Col1 = Col1)。例如,他们可能同样选择“1”或“*”。

实现相同目标的更具人性化的方法是

SELECT * FROM TableA WHERE Col1 IN ( SELECT Col1 IN TableB )

答案 4 :(得分:1)

拜托,请所有人......

EXISTS返回BOOLEAN,即TRUE或FALSE。如果结果集非空,则返回TRUE。子查询的相关性很重要,如上例所示。

即给我A中的所有行,其中至少有一个col1存在于B中。

选择列表中的内容无关紧要。这只是一种风格问题。