• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:distinct をexistsに変換する)

distinctをexistsに変換する方法とは?

このQ&Aのポイント
  • distinctをexistsに変換するとパフォーマンスが向上することがあります
  • 複雑なSQLでもexistsに変換できる場合があります
  • 複数のテーブルからのデータ取得やテーブル結合、外部結合でもexistsに変換できます

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

効率的なSELECT文を書くコツは、 SELECT句に必要のないテーブルはFROM句に書かない、 です。 最初の例は、TABLE1はSELECT句にありますが、TABLE2は無いですよね? この場合、TABLE1のみのSELECT句・FROM句を書いて、 WHERE句にTABLE2を書いたほうが良いです。 WHERE句に別のテーブルを「引っ掛けたい」場合は、EXISTSやINを利用してください。 一般的にはEXISTSの方が早いです。 二番目の例は。そもそも、TABLE1,2,3がSELECT句にあるので「変換」は出来ませんし そもそも、EXISTSとDISTINCTは変換可能な関係性にありません。 ところで、この外部結合は古い(確かOracle方言?)書き方です。 SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3    FROM TABLE1 a  LEFT OUTER JOIN TABLE2 b ON a.ID1 = b.ID1  LEFT OUTER JOIN TABLE3 c ON a.ID1 = c.ID1 がお勧めです。

evaan
質問者

お礼

丁寧なご回答、どうもありがとうございました。 参考にいたします。 他の皆様もありがとうございました。

その他の回答 (3)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

## 余計なお世話ですけど。。。 (前)SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 (後)SELECT a.ID1, a.NAME1 FROM TABLE1 a    WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) のほうも、一緒の結果になるとは限りませんが。。。 例)TABLE2はTABLE1のID1がすべてID2にあるとして。 a.ID1, a.NAME1 1 あ 2 い 2 い 3 う というデータがあれば、 (前) 1 あ 2 い 3 う (後) 1 あ 2 い 2 い 3 う となりますが。 ・・・ID1が単独でプライマリキー、またはユニークインデックスとして設定されている という前提がないと同じ結果にはならないです。

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

必ずしもできるとは限りません。少なくとも挙げられた例ではできません。 DISTINCTとEXISTSは別物です。 EXISTS句は(相関)副問合せなので、副問合せの外で列名を使用することができません。

evaan
質問者

お礼

ご回答ありがとうございます。 必ずしもできる訳ではないということですね。 了解しました。

回答No.1

DISTINCTは重複の排除をする機能なので、EXISTSに変換はできません。