3

私は次のクエリを持っています:

select id from t1
intersect
select id from t2
intersect
select id from t3

一部のテーブルではidが一意でない可能性があるため、distinctを使用する必要があります。

一般的に何が良いですか:

select distinct id from (
select id from t1
intersect
select id from t2
intersect
select id from t3)

また

select distinct id from t1
intersect
select id from t2 -- here id is unique
intersect
select distinct id from t3
4

1 に答える 1

6

の必要はありませんDISTINCTINTERSECTオペレーターは、個別の値のセットを自動的に生成します。この例でわかるように、 1xの2つの行がありID、1の1yつの行だけがあり、2つの行のうちIDの1つだけがINTERSECTION生成されます。

SQL> ed
Wrote file afiedt.buf

  1  with x as (select 1 id from dual union all select 1 from dual),
  2       y as (select 1 id from dual)
  3  select id
  4    from x
  5  intersect
  6  select id
  7*   from y
SQL> /

        ID
----------
         1

INTERSECT2行のテーブルをそれ自体で取得した場合でも、出力に1つの行が表示されます

SQL> ed
Wrote file afiedt.buf

  1  with x as (select 1 id from dual union all select 1 from dual)
  2  select id
  3    from x
  4  intersect
  5  select id
  6*   from x
SQL> /

        ID
----------
         1
于 2012-08-08T09:07:30.620 に答える