mysql--一個欄位的多個值連表查詢
阿新 • • 發佈:2022-04-20
眾所周知,MySQL是關係型資料庫,我們在處理關係的方式可以通過外來鍵,也可以通過用一個欄位去儲存另一張表的唯一值,下面說一下我當前的場景
table1:user表
table2:team表
id | team_name | team_owner | team_leaders |
自增主鍵 | 團隊1 | zhangsan | lisi,wangwu |
其中,team表是這樣的結構,首先從業務方面:team_owner最多1個人,而team_leaders欄位是不確定的,有可能無leader,有可能1個,有可能多個,那麼也可以看得出來,對於這個角色我用的是字串型別,這個時候,我想要讓這張表與user表通過join查詢匹配對應的人名字,怎麼讓team_leaders欄位的姓名匹配出來呢??
select t.id,group_concat(u.name) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id
id | group_concat(u.name) |
1 | 李四,王五 |
但是,這裡遇到的一個問題是:find_in_set是獲取到位置,按獲取到的位置排序,再group concat,就是如果在user表裡,wangwu的id是1,lisi的id是2,,那麼查出來的結果就是這樣的:它會以user表的索引去排序,有可能會顛倒我team表裡這個欄位的順序
id | group_concat(u.name) |
1 | 王五,李四 |
這裡需要再去排序以下
select t.id,group_concat(u.name order by find_in_set(u.username,t.team_leaders)) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id