• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの効率化について)

SQLの効率化について

このQ&Aのポイント
  • SQLの効率化について質問があります。テーブルの特定のレコードとその子レコードを取得したいですが、現在は複数回のSQL実行が必要です。より効率的な方法があれば教えてください。
  • 以下のソースコードでは、テーブルから特定のレコード及びその子レコードを取得しています。しかし、複数回のSQL実行が必要であり、効率的ではありません。1回のSQL実行で同じ結果を得る方法を教えてください。
  • テーブルから特定のレコード及びその子レコードを取得する際、現在は複数回のSQL実行が必要です。より効率的な方法があれば教えていただきたいです。

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

  • ベストアンサー
  • xKENx
  • ベストアンサー率65% (21/32)
回答No.1

SQLの発行回数を減らすということであれば下記のようなSQLで1度に結果取得できると思います。 iroha_168さんのサンプルプログラムをSQLで表現した感じです。 SELECT * FROM tbl WHERE id = '0001' OR parent_id = '0001' OR parent_id IN (SELECT id FROM tbl WHERE parent_id = '0001')

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいたSQL文で意図した動作となりました。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

こんな感じでしょうか? select `id`, `name`, `parent_id` from `tbl` where `id` = '0001' or `parent_id` = '0001' union all select `id`, `name`, `parent_id` from `tbl` where `parent_id` in ( select `id` from `tbl` where `parent_id` = '0001' ); 最近のOracleやPostgreSQL、SQL Serverでは with t as ( select id, name, parent_id from tbl where parent_id = '0001' ) select id, name, parent_id from tbl where id = '0001' union all select id, name, parent_id from t union all select id, name, parent_id from tbl where parent_id in ( select id from t ) とも書けますが。

iroha_168
質問者

お礼

ご回答ありがとうございます。 ご教示いただいた1つ目のSQL文で意図した動作となりました。 また、OracleやPostgreSQL、SQL Serverでの記述方法もご教示いただきありがとうございます。 それらのデータベースを使用する際は参考にさせていただきたいと思います。 このたびはどうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A