1

以下の2つのクエリで同じ結果が得られると思いましたが、試してみると別の結果が得られました。結合とサブクエリ以外の違いを説明してください。ここで t1id はプライマリ列で、t2id は tbl_1 からの参照列です

select * from tbl_1 where t1id in (select t2id from tbl_2);

select t1.* from tbl_1 t1, tbl_2 t2 where t1.t1id = t2.t2id;

EDIT:最初のクエリで93レコード、2番目のクエリで74レコードを取得しようとしたとき、最初のクエリを次のようにわずかに変更しました:

select * from tbl_1 where t1id in (select distinct t2id from tbl_2);

それから私は40行を得ました。誰が何が起こっているのか説明できますか。

前もって感謝します

4

3 に答える 3

4

最初のクエリidは、2 番目のテーブルに がある最初のテーブルのすべての行を選択します。

2 番目のクエリは、最初のテーブルからすべての行を選択し、それらの各行について、2 番目のテーブルのすべての行を選択します。次に、id一致しない行を除外します。

idが 2 番目のテーブルで一意でない場合、2 番目のクエリは最初のクエリよりも多くの行を返す可能性があります。

于 2013-05-01T06:51:17.640 に答える