在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

1.剛開始學(xué)習(xí)sql遇到了一個(gè)較為復(fù)雜的查詢,鼓搗了半天也不行
2.查詢需求:

A表機(jī)構(gòu)  [rs_user]

clipboard.png

B表結(jié)構(gòu) [rs_user_list]

clipboard.png

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

  • 當(dāng)paraid=100時(shí),別名為 name

  • 當(dāng)paraid=103時(shí),別名為 companyName

  • 當(dāng)paraid=106時(shí),別名為 companyAddress

  • 當(dāng)paraid=109時(shí),別名為 avatar

  • 當(dāng)paraid=112時(shí),別名為 companyAbout

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

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

求大神給寫一下

回答
編輯回答
玩控

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

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

當(dāng)paraid=100時(shí),別名為 name
當(dāng)paraid=103時(shí),別名為 companyName
當(dāng)paraid=106時(shí),別名為 companyAddress
當(dāng)paraid=109時(shí),別名為 avatar
當(dāng)paraid=112時(shí),別名為 companyAbout

或者是確定的情況下, 可以通過下面的 sql 語句實(shí)現(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 ...

一對(duì)多關(guān)系, 要合并數(shù)據(jù) sql 實(shí)現(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ù)先讀出,得到結(jié)果集再遍歷,根據(jù)paraid的值,添加相應(yīng)鍵值

2018年9月6日 05:14