dポイントプレゼントキャンペーン実施中!

データの副問合せではまってます。
助言いただければ幸いです。

やりたい事
B_IDを起点に、C表E_IDのNAMEを表示。またB表に紐付くA表とC表のE_IDを比較し、一致する場合○をつける。


A表 A_ID,T_ID,E_ID :(A_IDプライマリキー)

B表 B_ID,T_ID :(B_IDプライマリキー)

C表 C_ID,B_ID,E_ID :(C_IDプライマリキー)

E表 E_ID,NAME :(E_IDプライマリキー)

要件
・取得したいのは以下の条件のE表のNAME。
・C表のE_IDでNAMEを取得する。
・C表とA表をE_IDで比較し、一致する場合NAMEの横に「○」をつける。
・B表のB_IDを指定し、B表(T_ID)と一致するA表とB表(B_ID)と一致するC表を比較。


上記の実行のために以下のSQLを作成しましたが、副問合せで複数行戻るためエラーが出て、
条件をはずすと結果が思うようにでません。
できればSQL文でやりたいのですが
こういう場合はどうすればいいのでしょうか?
わかりづらいと思いますがよろしくお願いします。


SELECT E.NAME,
IF(C.C_ID = (SELECT W.C_ID FROM C AS W JOIN B AS X ON W.B_ID=X.B_ID
JOIN A AS Y ON Y.T_ID=X.T_ID WHERE X.B_ID=B.B_ID AND W.E_ID=Y.E_ID),'○','')
FROM A,B,C,E WHERE C.E_ID=E.E_ID AND B.B_ID=1;

バージョン:MySQL5.0

A 回答 (2件)

やりたいことが複雑なので整理してみる。



要件:
1)結局一番取得したいのはEのNAME
2)C.E_ID = A.E_ID の場合NAMEの横に○をつける。。
3)B.B_ID を指定(??)し、B.T_ID = A.T_ID and B.B_ID = C.B_ID を比較。

3)が何をしたいかが不明。指定をするのはどういう意味ですか?
また、比較とはどのよう比較すればいいのですか?
比較した結果どのようにしたいのですか?


全体的に質問文(定義)が不明です。


こういうことですか?

select NAME,if(C.E_ID=A.E_ID,'○','-') from E
left join C on E.E_ID = C.E_ID
left join B on C.B_ID = B.B_ID
left join A on B.T_ID = A.T_ID

## 以下テストデータ

create table A (
A_ID text,
T_ID text,
E_ID text
);
create table B (
B_ID text,
T_ID text
);
create table C (
C_ID text,
B_ID text,
E_ID text
);
create table E (
E_ID text,
NAME text
);

insert into A values('A1','T1','E1');
insert into A values('A2','T2','E2');
insert into B values('B1','T1');
insert into B values('B2','T2');
insert into C values('C1','B1','E1');
insert into C values('C2','B2','E2');
insert into E values('E1','NAME1');
insert into E values('E2','NAME2');
insert into E values('E3','NAME3');
    • good
    • 0

各表のデータ例と、得たい結果例を示せませんか?

    • good
    • 0

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