相同的列比较如何导致它们之间的差异?

时间:2012-12-21 00:57:14

标签: sql sql-server sql-server-2008 sql-server-2005

本声明

SELECT * FROM TempTable t1 

给了我这个输出:

id  idIndice    valor
----------------------------
13  11          11111111
13  12          11111
14  11          11111111
14  12          11111
16  12          11111

现在稍作改动:

SELECT * FROM TempTable t1
WHERE (select count(*) from TempTable t2 where t1.id = t2.id AND t1.valor != t2.valor) = 1

我明白了

id  idIndice    valor
----------------------------
13  11          11111111
13  12          11111
14  11          11111111
14  12          11111

t1和t2是对同一tempTable的引用,我可以理解t1.id = t2.id但是:

t1.valor != t2.valor 

对我来说太过分了。如何将相同的列作为t1和t2引用相同的表可以是不同的?

为什么最后这个“= 1”

1 个答案:

答案 0 :(得分:3)

第二个查询基本上做的是“选择具有相同ID和不同valor的行数为1 的任何行”,即“选择任何具有重复ID的行

这就是为什么选择id=13的两行,因为它们彼此重复,以及选择id=14的两行的原因。

请注意,如果有三个具有相同ID的行,则不会选择任何一个,因为它们的重复ID数不会是1,而是2。