distinctをexistsに変換した方がパフォーマンスが良いようで、
例えば以下の例があるとします
----------------------------------
(前)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)
----------------------------------
もっと複雑なSQLの場合、EXISTSに変換できるのでしょうか?。複雑なSQLとは、
「複数のテーブルからカラムを取得」「テーブル結合が2つ以上」「外部結合」
などのSQLで、以下に例を示します。
(例)SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3
FROM TABLE1 a,TABLE2 b,TABLE3 c
WHERE a.ID1 = b.ID1(+)
AND a.ID1 = c.ID1(+)
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
がお勧めです。
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が単独でプライマリキー、またはユニークインデックスとして設定されている
という前提がないと同じ結果にはならないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle SQL update方法 2 2022/06/22 14:07
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL 複数テーブルのupdate
-
男性と2人で飲食店に行きテーブ...
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
MS Accessを共有した際にファイ...
-
SQliteの日付検索について
-
Notion@リレーション値の取得...
-
QSL でのフォーム画面作成について
-
うまくいきません教えてくださ...
-
このテーブルで
-
Accessのテーブルデータを一気...
-
一つ前に戻るには…
-
Access データベースを分割した...
-
SELECT 文の NULL列は?
-
Access無いけど.mdbが見たい!
-
mysqlのupdate構文についての質...
-
妹が、メルカリで売れた商品を...
-
Sqliteリレーションについて2
-
CSVファイルを毎日、全レコード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
ROWNUMでUPDATEをしたいのです...
-
sqlplusで表示が変なので、出力...
-
SQL 複数テーブルのupdate
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
SQLで違うテーブルの値を比較し...
-
カラム位置変更
-
UPDATE文
-
件数とデータを同時に取得する...
-
特定のカラムが更新されたとき...
-
Oracle(オラクル)で、日付時刻...
-
半角英数文字の抽出がしたい。
-
数値をNUMBER型にするかCHAR型...
-
DELETE文とロックについて
-
Oracleのview、synonymをCOMPIL...
-
SQL(oracle)でご助言いただきた...
-
SELECT文で指定桁数分抽出する...
おすすめ情報