鍍金池/ 問答/數(shù)據(jù)庫/ 求教,SQL關聯(lián)查詢別名去重的查詢寫法!

求教,SQL關聯(lián)查詢別名去重的查詢寫法!

1.剛開始學習sql遇到了一個較為復雜的查詢,鼓搗了半天也不行
2.查詢需求:

A表機構  [rs_user]

clipboard.png

B表結構 [rs_user_list]

clipboard.png

想要實現(xiàn)的效果,
將B表的info字段以別名的形式顯示在A表中,B表別名規(guī)則

  • paraid=100時,別名為 name

  • paraid=103時,別名為 companyName

  • paraid=106時,別名為 companyAddress

  • paraid=109時,別名為 avatar

  • paraid=112時,別名為 companyAbout

有一點需要注意,比如A表中有13這個id,但是B表中的listid并沒有13這個id,但是取數(shù)據(jù)的的時候也要把別名列一起帶出來,只不過值都是空字符串

查出來的數(shù)據(jù)格式是這樣的
clipboard.png

求大神給寫一下

回答
編輯回答
玩控

case when 語句是無法實現(xiàn)的, A 關聯(lián) B 后是多條數(shù)據(jù), 那么 case when 出來的結果沒法合并成一行.

如果說, 條件固定 也就是 paraid 只有

當paraid=100時,別名為 name
當paraid=103時,別名為 companyName
當paraid=106時,別名為 companyAddress
當paraid=109時,別名為 avatar
當paraid=112時,別名為 companyAbout

或者是確定的情況下, 可以通過下面的 sql 語句實現(xiàn)

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 ...

一對多關系, 要合并數(shù)據(jù) sql 實現(xiàn)可以考慮此方法.

2017年5月3日 16:28
編輯回答
魚梓

可以用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

2017年8月31日 01:10
編輯回答
笨尐豬

能否考慮不管別名將數(shù)據(jù)先讀出,得到結果集再遍歷,根據(jù)paraid的值,添加相應鍵值

2018年9月6日 05:14