0

違いは何ですか..

select a.value1
from apple a, banana b, oranges o
where a.value1 = b.value1 and o.value1 = a.value1 and o.value2 = 'oranges';

compared to

select a.value1
from apple a
where a.value1 in (
   select b.value1
   from banana b, oranges o
   where b.value1 = o.value1 and o.value2 = 'oranges';
);

本当に違いがありますか?

4

2 に答える 2

2

結合条件axbxcが複数の行になる場合、最初のものはテーブル a からの値を複数回表示する場合があります。

2番目のものは、テーブルの値を1回だけ表示します(「サブクエリのリストにある」かどうかをテストするため)

SQL を使い始めたばかりなので、ANSI SQL92 構文と、IN の代替である EXISTS 句を使用してクエリを言い換えさせてください (ただし、最適化方法が異なる場合があります)。

select a.value1
from apple a
where EXISTS (
   select *
   from oranges o
   INNER JOIN banana b on b.value1 = o.value1
   where o.value2 = 'oranges' and o.value1 = a.value1
);
于 2011-02-05T10:35:25.383 に答える
0

はい、違いがあります:

b と o の結合で同じ b.value1 を持つ複数の行が返される場合、最初のクエリでも複数の行が返されます。ただし、2 番目のクエリはすべての b.value1 をセットに入れるため、重複した b.value1 は統合されます。

于 2011-02-05T10:34:22.853 に答える