我有五個表,如
基表
|group_id |group_name |
|----------|-------------|
| 1 | gn1 |
| 2 | gn2 |
| 3 | gn3 |
"標簽 "表
| tag_id | tag_name |
|--------|----------|
| 1 | tgn1 |
| 2 | tgn2 |
| 3 | tgn3 |
"主題 "表
| theme_id | theme_name |
|----------|------------|
| 1 | thn1 |
| 2 | thn2 |
| 3 | thn3 |
"標簽 "映射表
| rec_id | group_id | tag_id |
|--------|----------|--------|
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
"主題 "映射表
| rec_id | group_id | theme_id |
|--------|----------|----------|
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 2 | 1 |
我在創建一個sqlite查詢以獲得這樣的表格時遇到了一些問題:
我在創建一個sqlite查詢時遇到了一些問題。
| group_id | group_name | tags | themes |
|----------|------------|------------|------------|
| 1 | gn1 | tgn2。tgn3 | thn2 |
| 2 | gn2 | tgn1 | thn3。thn1|
| 3 | gn3 | | |
uj5u.com熱心網友回復:
一個相當簡單的方法使用相關的子查詢:
select b.*,
(select group_concat(t.tag_name)
from tag_mapping tm join 標簽 t
標簽 t
on tm.tag_id = t.tag_id
where tm.group_id = b.group_id
) as 標簽。
(select group_concat(t.theme_name)
from theme_mapping tm join 主題 t
主題 t
on tm.theme_id = t.theme_id
where tm.group_id = b.group_id
) as themes
from base b;
uj5u.com熱心網友回復:
group_concat函式將完成這個任務--連接所有的表,通過組的id和名稱分組,group_concat其他細節:
SELECT g.group_id。
g.group_name。
GROUP_CONCAT(t.tag_name, ', ') AS 標簽
GROUP_CONCAT(th.theme_name, ', ') as theme
FROM groups g
JOIN tags_map tg ON g.group_id = tm.group_id
JOIN 標簽 t ON t.tag_id = tm.tag_id
JOIN themes_map thm ON g.group_id = thm.group_id
JOIN themes the ON th.theme_id = thm.theme_id
GROUP BY g.group_id, g.group_name
uj5u.com熱心網友回復:
連接這些表,通過Base表的每一行進行分組,并使用GROUP_CONCAT()與DISTINCT關鍵字來洗掉從多個連接中回傳的重復內容:
SELECT b.group_id, b.group_name,
GROUP_CONCAT(DISTINCT tg.tag_name) tags。
GROUP_CONCAT(DISTINCT th.theme_name) themes
FROM Base b
LEFT JOIN TagsMap tgm ON tgm.group_id = B.group_id
LEFT JOIN 標簽 tg ON tg.tag_id = tgm.tag_id
LEFT JOIN ThemeMap thm ON thm.group_id = B.group_id
LEFT JOIN Theme th ON th.theme_id= thm.theme_id
GROUP BY b.group_id, b.group_name;
請看demo.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309800.html
標籤:
