数据库查询一对多关系,只列出一条数据
比如有3个表table1,table2,table3,为简洁说明,设其中table1,table2都只包括2个字段,一个是id,一个是name,table1与table2...
比如有3个表
table1, table2, table3, 为简洁说明,设其中table1,table2都只包括2个字段,一个是id,一个是name,table1与table2中记录是一对多关系, table3是两者的关系表,有2个字段,table1_id,table2_id
现在由于需要查询的通用性,写一个方法
初始化的查询语句,在oracle中的sql
select aaa.*,bbb.name as bbb_name from table1 aaa
left join table3 ccc on aaa.id=ccc.table1_id
left join table2 bbb on ccc.table2_id=bbb.id
where 1=1
然后需要增加额外的查询条件,比如需要查询table2.name是否包含'王',只需要在后面增加 and bbb.name like '%王%' 之类的就可以了
但是,由于table3是一对多的关系表,那么,查询的结果有可能会出现 table1中的一条数据在查询结果中是多条数据,但是事实上,我只需要显示一条数据就行了,如果查询条件中刚好包括了bbb.name like '%王%'之类的,并且查询只得到一条结果,倒是刚好,但是如果查询结果是多条该怎么办(比如恰好没有用到bbb.name这个查询条件,那么可以说基本上table1中每条数据在结果中都是以多条结果显示的),但是bbb.name这个字段又是必须要的
问:能否实现将 table1中每条记录对应的table2.name合并到同一条结果中加以显示?
对sql不是太熟悉,盼高手指导 展开
table1, table2, table3, 为简洁说明,设其中table1,table2都只包括2个字段,一个是id,一个是name,table1与table2中记录是一对多关系, table3是两者的关系表,有2个字段,table1_id,table2_id
现在由于需要查询的通用性,写一个方法
初始化的查询语句,在oracle中的sql
select aaa.*,bbb.name as bbb_name from table1 aaa
left join table3 ccc on aaa.id=ccc.table1_id
left join table2 bbb on ccc.table2_id=bbb.id
where 1=1
然后需要增加额外的查询条件,比如需要查询table2.name是否包含'王',只需要在后面增加 and bbb.name like '%王%' 之类的就可以了
但是,由于table3是一对多的关系表,那么,查询的结果有可能会出现 table1中的一条数据在查询结果中是多条数据,但是事实上,我只需要显示一条数据就行了,如果查询条件中刚好包括了bbb.name like '%王%'之类的,并且查询只得到一条结果,倒是刚好,但是如果查询结果是多条该怎么办(比如恰好没有用到bbb.name这个查询条件,那么可以说基本上table1中每条数据在结果中都是以多条结果显示的),但是bbb.name这个字段又是必须要的
问:能否实现将 table1中每条记录对应的table2.name合并到同一条结果中加以显示?
对sql不是太熟悉,盼高手指导 展开
2个回答
展开全部
select aaa.*, wmsys.wm_concat (bbb.name) as bbb_name from table1 aaa
left join table3 ccc on aaa.id=ccc.table1_id
left join table2 bbb on ccc.table2_id=bbb.id
where 1=1
group by aaa.id,aaa.name
left join table3 ccc on aaa.id=ccc.table1_id
left join table2 bbb on ccc.table2_id=bbb.id
where 1=1
group by aaa.id,aaa.name
参考资料: http://hi.baidu.com/xckouy/blog/item/8edeba57570f703a43a75b5c.html
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询