本声明
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”
答案 0 :(得分:3)
第二个查询基本上做的是“选择具有相同ID和不同valor的行数为1 的任何行”,即“选择任何具有重复ID的行“
这就是为什么选择id=13
的两行,因为它们彼此重复,以及选择id=14
的两行的原因。
请注意,如果有三个具有相同ID的行,则不会选择任何一个,因为它们的重复ID数不会是1,而是2。