条件是这样的A表有字段:id name p_id
P表:与A表一对多(一P多A),字段:id p_name B表,与A表多对一关系(一A多B),字段:id a_id(外键,=A表id)b_name
C表,与A表多对一关系(一A多C),字段:id a_id(外键,=A表id)c_name
D表,与A表多对一关系(一A多D),字段:id a_id(外键,=A表id)d_name
现在我的查询得到的结果是:
得到A表的name B表的b_name拼接拼接同a_id的为一个字符串 C表的c_name拼接同a_id的为一个字符串 C表的c_name拼接同a_id的为一个字符串比如有数据是:
P:id p_name
1 中国
A:id name p_id
1 北京
B: id a_id b_name
1 1 描述1
2 1 描述2
c: id a_id b_name
1 1 价格1
2 1 价格2
3 1 价格3
d: id a_id b_name
1 1 列表1
2 1 列表2我希望的结果是
a.id a.name p.p_name b.b_name c.c_name d.d_name
1 北京 全国 描述1,描述2 价格1,价格2,价格3 列表1,列表2 请问应该怎么写,谢谢帮助
P表:与A表一对多(一P多A),字段:id p_name B表,与A表多对一关系(一A多B),字段:id a_id(外键,=A表id)b_name
C表,与A表多对一关系(一A多C),字段:id a_id(外键,=A表id)c_name
D表,与A表多对一关系(一A多D),字段:id a_id(外键,=A表id)d_name
现在我的查询得到的结果是:
得到A表的name B表的b_name拼接拼接同a_id的为一个字符串 C表的c_name拼接同a_id的为一个字符串 C表的c_name拼接同a_id的为一个字符串比如有数据是:
P:id p_name
1 中国
A:id name p_id
1 北京
B: id a_id b_name
1 1 描述1
2 1 描述2
c: id a_id b_name
1 1 价格1
2 1 价格2
3 1 价格3
d: id a_id b_name
1 1 列表1
2 1 列表2我希望的结果是
a.id a.name p.p_name b.b_name c.c_name d.d_name
1 北京 全国 描述1,描述2 价格1,价格2,价格3 列表1,列表2 请问应该怎么写,谢谢帮助
2 t2 as (select a_id,wm_concat(c_name) c_name from (select * from c order by c.a_id,c.id asc) group by a_id ),
3 t3 as (select a_id,wm_concat(d_name) d_name from (select * from d order by d.a_id,d.id asc) group by a_id )
4 select a.id,a.name,p.p_name,t1.b_name,t2.c_name,t3.d_name
5 from a,p,t1,t2,t3
6 where a.p_id=p.id and a.id=t1.a_id and a.id=t2.a_id and a.id=t3.a_id
7 ;
ID NAME P_NAME B_NAME C_NAME D_NAME
-- ---------- ---------- -------------- ----------------- -----------
1 北京 中国 描述1,描述2 价格1,价格2,价格3 列表1,列表2
SQL>
select p_name,a.name,wm_concat(b_name) as b_name,wm_concat(c_name) as c_name,
wm_concat(d_name) as d_name from
p,a,b,c,d
where p.id=a.p_id and a.id=b.a_id and a.id=c.a_id and a.id=d.a_id
group by p_name,a.name
wm_concat(d_name) as d_name from
p,a,b,c,d
where p.id=a.p_id and a.id=b.a_id and a.id=c.a_id and a.id=d.a_id
group by p_name,a.name
replace(wm_concat(b_name),',',' ')
其实就是连表查询查询A表所有字段,和A表的三个子表的所以字段(每个子表与A表都是多对一的关系,三个子表相互没有关联),和A表的父表大部分字段。(其实该父表还有一个子表TAT,要命么这不是)····
刚刚看到楼上的同志们之中有人这么写:
replace(wm_concat(b_name),',',' ')
但是这样不就相当于将","替换了么,?
即使将“,”替换为其他字符,我也不知用什么字符,毕竟我的表单里的数据貌似什么符号都允许,不知道将“,”换成什么。
逼急了我就一个一个查TAT555