SQL Server不会引发异常

时间:2018-12-05 07:17:30

标签: sql sql-server select

在最后一条查询语句中,我引用了destViewController.fullImage.image = self.itemImg.image 中不存在的列,并且SQL Server不验证该错误,执行后,我得到了Table2中存在的所有列,而没有任何行。

我认为这是错误的,因为返回值使我们知道Table1查询没有发现任何行而是抛出错误。

您能解释一下为什么SQL Server具有这种行为吗?

写在SQL Server 2014,SSMS 2016中。

WHERE

1 个答案:

答案 0 :(得分:3)

外部查询中的列在内部查询中可见。因此,实际上,对于表1中的每一行,您从表2中选择了该行的FirstName作为常量,为表2的每一行返回相同的值。由于一个值​​显然在自身列表中多次存在,因此不会返回任何行。

避免此类错误的一种方法是完全限定查询的列。如果这样做,将会得到您期望的错误:

SELECT * 
FROM 
    Table1 t1
WHERE 
    t1.FirstName NOT IN 
    ( 
    -- Produces an error, since there's no FirstName in Table2
    SELECT t2.FirstName FROM Table2 t2 
    )
相关问题