1

这个说法

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”

4

1 回答 1

3

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

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

请注意,如果存在具有相同 ID 的三行,则不会选择它们,因为它们的重复 id 的数量不会是 1,而是 2。

于 2012-12-21T01:01:02.837 回答