- ベストアンサー
SQLの高速化
- 重複結果が出力されてしまうクロス結合の問題を解決する方法
- ARCHIVE_ORDERとARCHIVE_SAMPLEのデータサイズによるパフォーマンス低下を解消する方法
- 指定の条件で高速な結果を出力するARCHIVE_SAMPLEの検索方法
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
前回の回答を転載しておきます。 > 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をつけてください。
その他の回答 (2)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
【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()を利用していますが、不要、かつカラムに指定することで インデックスが利かなくなります。
- yamada_g
- ベストアンサー率68% (258/374)
前回の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%') );