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

解決済みの質問

得られたカラムを利用して複数行を1文で取得したい

MySQLバージョン4.1.16を使用しています。

テーブル「tbl1」のnoが2が保有しているuser_id(この場合はaaaa)
の行を1つのSQL文で取得したいのですが、どのようなSQL文なるでしょうか?
例えばこの場合は1,2,4行目が取得できるようにしたいです。
また、PHPなどを利用して記述する場合に、
一旦、
select * from tbl1 where no = '2';
で得られたuser_id(aaaa)を変数に保存しておき、
それを利用してもう一度
select * from tbl1 where user_id = '{上のSQL文で得られた変数(中身はaaaa)}';
と二度記述してもできるのでしょうが、
初めの1つのSQL文で取得する場合と、2つのSQL文わけて取得する場合とでは
件数が多くなっていった時にどちらが早い遅いというのはあるのでしょうか?

テーブル「tbl1」
+----------+---------+
|  user_id  |  no   |
+----------+---------+
|  aaaa   |   1   |
+----------+---------+
|  aaaa   |   2   |
+----------+---------+
|  bbbb   |   3   |
+----------+---------+
|  aaaa   |   4   |
+----------+---------+

投稿日時 - 2008-04-05 16:42:12

QNo.3924429

すぐに回答ほしいです

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

副問い合わせでも可能ですが、自己結合を使って書けます。

SELECT T1.user_id,T1.no
FROM tbl1 AS T1,tbl1 AS T2
WHERE T2.no = 2 AND T1.user_id = T2.user_id;

インデックス(キー)の設定にもよりますが、テーブルサイズが大きくなったり、引くnoの数が増えてきた時には、この方法がもっとも速いでしょう。

投稿日時 - 2008-04-06 07:19:30

お礼

ご返答ありがとうございます。
なるほど、そういうやり方もあるんですね。
参考になりました。

投稿日時 - 2008-04-06 16:59:15

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

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

回答(2)

ANo.1

select * from tbl1 where user_id = (select user_id from tbl1 where no = 2)
または
select * from tbl1 where user_id in (select user_id from tbl1 where no = 2)
で取得可能です。(副問い合わせ)

投稿日時 - 2008-04-05 17:05:40

お礼

ご返答ありがとうございます。
そのやり方でできました。ありがとうございます。

投稿日時 - 2008-04-06 16:57:59

あなたにオススメの質問