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

2番目のクエリは基本的に、「同じIDで異な​​る値の行の数が1である行を選択する」、つまり「重複するIDを持つ行を選択する」です。

これが、の両方の行id=13が選択されている理由です。これらは互いに重複しているためです。また、の両方の行id=14が選択されているのもそのためです。

同じIDの行が3つある場合、重複するIDの数は1ではなく2になるため、いずれも選択されないことに注意してください。

于 2012-12-21T01:01:02.837 に答える