
http://okwave.jp/qa/q8328454.html
にて解決済みとしてしまいましたが、問題がありました。
クロス結合になってしまい、重複した結果が出力されてしまいます。
1個の結果だと1個の出力ですが、2個の結果だと4個の出力となってしまい、2乗できいてきてしまいます。
ご教示のほど、よろしくお願いいたします。
----------------------------------------------------------------
下記SQL文と同一の結果を出力しつつ、高速化は可能ですか?
ARCHIVE_SAMPLEとARCHIVE_ORDERが大きくなると著しくパフォーマンスが下がります。
ARCHIVE_ORDERにて検索をかけた結果のArchiveIDとOrder_SampleIDが一致するARCHIVE_SAMPLEを出力したいです。
データサイズとしては、ARCHIVE_ORDER<<ARCHIVE_SAMPLEなので、ORDER側で検索しています。
SELECT * FROM ARCHIVE_SAMPLE M WHERE M.ArchiveID IN (SELECT ArchiveID FROM ARCHIVE_ORDER WHERE UPPER(Order_PatientID) LIKE UPPER('%234%')) AND M.Order_SampleID IN (SELECT Order_SampleID FROM ARCHIVE_ORDER WHERE UPPER(Order_PatientID) LIKE UPPER('%234%'))
----------------------------------------------------------------
No.1ベストアンサー
- 回答日時:
前回の回答を転載しておきます。
> SELECT [mの全てのフィールドの列挙]
> FROM Archive_Sample m JOIN Archive_Order o
> ON m.ArchiveID=o.ArchiveID AND m.Order_Sampleid=o.Order_SampleID
> WHERE UPPER(o.Order_PatientID) LIKE '%234%'
SELECTの後ろにDISTINCTをつけてください。
No.3
- 回答日時:
【ARCHIVE_SAMPLE】
ArchiveID Order_SampleID
1 2
2 1
【ARCHIVE_ORDER】
ArchiveID Order_SampleID
1 1
2 2
こういうデータがあると抽出結果は2件になっていいんですか?
やりたいことはこうじゃないんですかね??
SELECT M.*
FROM ARCHIVE_SAMPLE M
WHERE EXISTS (
SELECT AO.ArchiveID, AO.Order_SampleID
FROM ARCHIVE_ORDER AO
WHERE AO.Order_PatientID LIKE '%234%'
AND M.ArchiveID = AO.ArchiveID
AND M.Order_SampleID = AO.Order_SampleID
)
また、LIKEでUPPER()を利用していますが、不要、かつカラムに指定することで
インデックスが利かなくなります。
No.2
- 回答日時:
前回のSQLは決してクロス結合ではないですが・・・。
データの関連性の問題ですよね。
で、別解としてEXISTSを使ってはどうでしょうか。
SELECT
*
FROM
ARCHIVE_SAMPLE M
WHERE EXISTS (
SELECT *
FROM ARCHIVE_ORDER O
WHERE M.ArchiveID = O.ArchiveID
AND M.Order_SampleID = O.Order_SampleID
AND UPPER(Order_PatientID) LIKE UPPER('%234%')
);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで以下のシステムを1か...
-
teraterm から起動したプログラ...
-
Accessでエクセル出力の保存先指定
-
エクセルで縦のカラムデータを...
-
SQLPLUSで結果を画面に表示しない
-
【Excel】[Expression.Error] ...
-
「○○○.ldb」のAccess レコード ...
-
オラクル(PL/SQL)のエラー
-
Access95のエクスポートで教え...
-
100万行のCSVを10万行ずつのフ...
-
VB6.0でファイルの一行だけ削除...
-
AccessのDB破損に関して お教...
-
Access インポート
-
txtをemlに変換したい!
-
Access 実行時エラー'3075' 対...
-
ACCESSのモジュールエラー?
-
ACCESSで他の人が使って...
-
ThunderbirdのメールをCSVでま...
-
拡張子が「cda」のファイルを聞...
-
PLSQLでファイルに書き込みをし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで以下のシステムを1か...
-
アクセスクエリ(複数)→マクロ...
-
エクセルで縦のカラムデータを...
-
ACCESS で 項目名を出力せずに...
-
Accessでエクセル出力の保存先指定
-
Access Excel出力する保存先を...
-
Access データベースの最適化を...
-
teraterm から起動したプログラ...
-
指数表示しない方法
-
「,」が入った文字列に「"」が...
-
AccessのマクロでExcelにエクス...
-
AccessのデータをExcelの決まっ...
-
Access2013の質問です
-
Access内の任意のクエリを指定...
-
エクセル 入力フォームのデータ...
-
Accessから指定した画像データ...
-
access 更新ボタンを作る
-
AccessでUTF-8のtxtデータを出力
-
エクセルデータのインポート(...
-
ACCESSのVBAで自動的に保存...
おすすめ情報