求教,SQL关联查询别名去重的查询写法!

1.刚开始学习sql遇到了一个较为复杂的查询,鼓捣了半天也不行
2.查询需求:

A表机构  [rs_user]

clipboard.png

B表结构 [rs_user_list]

clipboard.png

想要实现的效果,
将B表的info字段以别名的形式显示在A表中,B表别名规则

  • paraid=100时,别名为 name

  • paraid=103时,别名为 companyName

  • paraid=106时,别名为 companyAddress

  • paraid=109时,别名为 avatar

  • paraid=112时,别名为 companyAbout

有一点需要注意,比如A表中有13这个id,但是B表中的listid并没有13这个id,但是取数据的的时候也要把别名列一起带出来,只不过值都是空字符串

查出来的数据格式是这样的
clipboard.png

求大神给写一下

阅读 3.6k
3 个回答

case when 语句是无法实现的, A 关联 B 后是多条数据, 那么 case when 出来的结果没法合并成一行.

如果说, 条件固定 也就是 paraid 只有

当paraid=100时,别名为 name
当paraid=103时,别名为 companyName
当paraid=106时,别名为 companyAddress
当paraid=109时,别名为 avatar
当paraid=112时,别名为 companyAbout

或者是确定的情况下, 可以通过下面的 sql 语句实现

select
a.id, b.info as name, e.info as companyName
from a
left join (
select listid, info from b where paraid=100
) as n on a.id=n.listid
left jion ( 
select listid, info from b where paraid=103
) as e on a.id=e.listid
left join ...

一对多关系, 要合并数据 sql 实现可以考虑此方法.

可以用mysql条件判断:

条件判断
case b.paraid when 100 then b.info as 'name' when 103 then b.info as 'companyName' when ... else b.info as '' end

在下面带入条件:
select 条件 from rs_user a left join rs_user_list b on b.listid = a.id

能否考虑不管别名将数据先读出,得到结果集再遍历,根据paraid的值,添加相应键值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题