- ベストアンサー
テーブル結合の条件指定について
- テーブル結合の条件指定について詳しく解説します。
- 外部結合しているtable_cに条件を与える方法について説明します。
- テーブル結合を使って複数のテーブルのポイントを合計する方法を解説します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>table_cにcdがある場合は条件を指定し、 >ない場合は条件を指定しない table_c.cd = 'cd_1' or table_.cd is null 以下ざっとテスト create table table_a(id varchar(10),name varchar(10)); insert into table_a values('a1','aaa'),('a2','bbb'),('a3','ccc'); create table table_b(b_id varchar(10),a_id varchar(10),user_id int(5) unsigned zerofill not null,point int); insert into table_b values('b1','a1',1,5),('b2','a1',2,2),('b3','a3',7,10),('b4','a2',356,10); create table table_c(c_id varchar(10),user_id int(5) unsigned zerofill not null,cd varchar(10),bonus_point int); insert into table_c values('c1',1,'cd_1',1),('c2',7,'cd_2',1),('c3',356,'cd_1',1); //表示 SELECT b.user_id ,coalesce(b.point,0) + coalesce(c.bonus_point,0) as total_point FROM table_a as a INNER JOIN table_b as b ON a.id=b.a_id LEFT JOIN table_c as c ON b.user_id=c.user_id WHERE c.cd = 'cd_1' or c.cd is null ORDER BY total_point desc
お礼
回答ありがとうございます。 >c.cd = 'cd_1' or c.cd is null 上記だと、例えばtable_bにはuser_id:00002があってtable_cにはuser_id:00002がない場合、 結果にはuser_id:00002のものが出てこないことになります。 自己解決しましたが、やりたかったのは以下でできました。 SELECT table_b.user_id as user_id , (ifnull(table_b.age_count) + ifnull(table_c.bonus_point, 0)) as total_point FROM table_a INNER JOIN table_b ON (table_b.a_id=table_a.a_id) LEFT JOIN table_c ON (table_c.user_id=table_b.user_id) AND table_c.cd = 'cd_1' ORDER BY total_point desc ありがとうございました!