こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLの副問い合わせについて

SELECT
(副問い合わせ).a,
(副問い合わせ).b,
(副問い合わせ).c,
(副問い合わせ).d
FROM
TableA
※副問い合わせの抽出条件は同じ

このように同じ副問い合わせが複数あるとそれだけ処理が重くなるのでしょうか?
どうしたら一つにまとめることができるのでしょうか?

投稿日時 - 2012-07-27 20:08:53

QNo.7613839

暇なときに回答ください

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

 この情報では、出来ることもあれば出来ないこともある。効率が悪いこともあるしそれが最善であることもある。
 としか書けないです。答えになってませんよね(苦笑)

 そうですね。あなたが書いたselect文を全部省略せずに書いてください。テーブル名とフィールド名は適当に変えてもかまいません。でもそれ以外の分は何も変えずに省略せずに書きましょう。

 又は、テーブルの定義と、あなたが求める結果を日本語で省略せずに書いてください。この場合は、出来れば、フィールド名・テーブル名も変えて欲しくないですね。最低でも、あなたが求める答えを作るのに必要なテーブル間・フィールド間の関係が解るだけの説明が必要です。

 フィールド名やテーブル名がそのまま全部出せるならどちらでもかまいませんが、名前が事情により出せないのであれば、前者の方が簡単でしょう。
 ここまで出てくれば、たくさんの人がいろいろな方法を提示してくれるでしょう。

投稿日時 - 2012-07-27 23:20:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

> SELECT tableA.a * (select 1 from tableB)
> tableA.b * (select 2 from tableB)
> FROM
> tableA

このようなSQLは文法エラーで通りません。

投稿日時 - 2012-07-28 01:02:26

ANo.3

> SELECT tableA.a * (select 1 from tableB)
> tableA.b * (select 2 from tableB)
> FROM
> tableA
まだ他に何かやってませんか?
SELECT tableA.a * 1, tableA.b * 2 FROM tableA
にみえてしまいます。

投稿日時 - 2012-07-28 00:09:26

ANo.1

FROM TableAだけで良いのですか?
その「副問い合わせ」は何をしてるんですか?

> どうしたら一つにまとめることができるのでしょうか?
「一つにまとめる」とは、以下みたいなことですか?
SELECT TableA.ID, a.ID, b.ID, c.ID, d.ID
FROM TableA,
(select ID, ........ ) AS a,
(select ID, ........ ) AS b,
(select ID, ........ ) AS C,
(select ID, ........ ) AS d
where ...
;

投稿日時 - 2012-07-27 22:27:32

補足

回答ありがとうございます。
説明が下手で申し訳ないです。

>その「副問い合わせ」は何をしてるんですか
SELECTのselect_exprで使うための値をとってきています。

SELECT tableA.a * (select 1 from tableB)
tableA.b * (select 2 from tableB)
FROM
tableA

結合をつかえば1回の問い合わせで済むのでしょうか?

投稿日時 - 2012-07-27 22:53:57

あなたにオススメの質問