アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のような状況で、

a[id、あ、い]
b[id、う、え]、[id、お、か]
c[id、き、く、け]、[id、こ、さ、し]
(idはすべて同じ値とします)

というデータがあったとしたら、取得したいのは
[id、あ、い、う、え、き、く、け]
というデータです。

INNER JOINを使うと、idが重複した行まで取得されてしまうため、解決策を探しています。
MySQLの構文では、どのようなクエリにすればよろしいでしょうか。
よろしくお願い致します。

A 回答 (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、あ、い、う、え、き、く、け]がほしいなら
そのデータを特定するなんらかのロジックが必要です。
データベースでは出現する順番は必ずしも登録順ではありません。
    • good
    • 0
この回答へのお礼

詳細な回答を頂き、誠にありがとうございます。

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文のみで実現したかったのですが、やはり難しいようですね・・・

頂いた内容を参考に、また質問を立てるかもしれません。
ありがとうございました。

お礼日時:2012/01/16 18:49

ごめんなさい、命題がちんぷんかんぷんなので要補足。



テーブルとデータをもう少し解りやすい表記にしてもらえるといいかと
そもそも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、あ、い、う、え、き、く、け]

よろしくお願い致します。

補足日時:2012/01/16 17:10
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!