- ベストアンサー
MySQL:複数のテーブルに跨いだselect文
以下のような状況で、 a[id、あ、い] b[id、う、え]、[id、お、か] c[id、き、く、け]、[id、こ、さ、し] (idはすべて同じ値とします) というデータがあったとしたら、取得したいのは [id、あ、い、う、え、き、く、け] というデータです。 INNER JOINを使うと、idが重複した行まで取得されてしまうため、解決策を探しています。 MySQLの構文では、どのようなクエリにすればよろしいでしょうか。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
仮にこうだとして・・・ create table A(id int,a1 varchar(20),a2 varchar(20)); create table B(id int,b1 varchar(20),b2 varchar(20)); create table C(id int,c1 varchar(20),c2 varchar(20),c3 varchar(20)); insert into A values(1,'あ','い'); insert into B values(1,'う','え'),(1,'お','か'); insert into C values(1,'き','く','け'),(1,'こ','さ','し'); idで結合するのはこうですね select A.id,a1,a2,b1,b2,c1,c2,c3 FROM A inner join B on A.id=B.id inner join C on A.id=C.id; 当然結果はこうです id、a1、a2、b1、b2、c1、c2、c3 1、あ、い、う、え、き、く、け 1、あ、い、お、か、き、く、け 1、あ、い、う、え、こ、さ、し 1、あ、い、お、か、こ、さ、し ここからなんでもいいのでとりあえず1行抜き出せばいいのならLIMIT 1です select A.id,a1,a2,b1,b2,c1,c2,c3 FROM A inner join B on A.id=B.id inner join C on A.id=C.id LIMIT 1; ただし、[id、あ、い、う、え、き、く、け]がほしいなら そのデータを特定するなんらかのロジックが必要です。 データベースでは出現する順番は必ずしも登録順ではありません。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
ごめんなさい、命題がちんぷんかんぷんなので要補足。 テーブルとデータをもう少し解りやすい表記にしてもらえるといいかと そもそもa,b,cは何を意味しているのでしょうか? またbのところはどのようなロジックで「う、え」がえらばれ「お、か」ではないのでしょうか? (き、く、けも同様)
補足
すみません・・・補足します。 a~cはテーブル名です。 仮に項目名もつけて、表っぽくすると、以下のようになります。 <テーブルa> a0 , a1 , a2//項目名 [id、あ、い] <テーブルb> b0 , b1 , b2//項目名 [id、う、え] [id、お、か] <テーブルc> c0 , c1 , c2 , c3//項目名 [id、き、く、け] [id、こ、さ、し] この3つのテーブルから、MySQLのSELECT文で、以下のような結果を取得できる構文がわからず、質問した次第です。 [id、あ、い、う、え、き、く、け] よろしくお願い致します。
お礼
詳細な回答を頂き、誠にありがとうございます。 select A.id,a1,a2,b1,b2,c1,c2,c3 FROM A inner join B on A.id=B.id inner join C on A.id=C.id; ここまではたどり着けたのですが、この先がわかりませんでした。 プログラムの都合上、出来ればMySQLのクエリ1文のみで実現したかったのですが、やはり難しいようですね・・・ 頂いた内容を参考に、また質問を立てるかもしれません。 ありがとうございました。