当前位置: 代码迷 >> Sql Server >> ,SQL语句如何写
  详细解决方案

,SQL语句如何写

热度:37   发布时间:2016-04-24 09:00:45.0
求助,SQL语句怎么写
A表,字段为 r_id, r_name
B表,字段为 h_id, r_id
C表,字段为 s_id, h_id, s_name
D表,字段为e_id, h_id, e_name

要查询出如下的信息,SQL语句应该怎么写?
r_name   s_name   e_name
------解决思路----------------------
SELECT A.r_name,C.s_name,D.e_name
FROM A JOIN B ON A.r_id=B.r_id
JOIN C ON B.h_id=C.h_id
JOIN D ON C.s_id=D.s_id
这样?
------解决思路----------------------
可以用FOR XML,给大神们去写吧
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

select A.r_name,C.s_name,D.e_name
from A
left join B on A.r_id = B.r_id
left join C on B.h_id = C.h_id
left join D on B.h_id = D.h_id


数据能查出来了,不过我之前忘记说明:A对B为一对多关系,B对C为多对多关系,B对D为一对一关系,即r_name可能对应多个s_name,一个e_name。若要实现一个r_name一条记录的查询效果,语句得怎么改?

一个r_name一条记录,你要怎么显示?
根据你的描述,显然同一个r_name可能出出现多条记录。


因为一个r_name会有多个s_name,一个e_name。能否实现多个s_name显示在一起,不同的s_name之间用逗号隔开,那就可以一个r_name一条记录?

即使按照你说的合并,一个r_name仍然会有多行。
因为e_name可能有多个!


select A.r_name
,STUFF((SELECT ','+[s_name] FROM C WHERE h_id=B.h_id FOR XML PATH('')), 1, 1, '') as s_name
,D.e_name
from A
left join B on A.r_id = B.r_id
left join D on B.h_id = D.h_id

  相关解决方案