我正在嘗試合并兩個表之間的列并將它們連接起來。雖然我可以group_concat在特定于一個表的列上使用,但還有一列我需要組合table1.role_id并table2.role_id使用特定分隔符連接結果。
我正在使用 sqlite 資料庫。
SQL小提琴:鏈接
表格1
| 姓名 | 角色 ID | dep_id |
|---|---|---|
| 一個 | 1 | d1 |
| 一個 | 1 | d2 |
| b | 2 | d3 |
| b | 3 | d5 |
| C | 3 | d4 |
表2
| 姓名 | 角色 ID | IPv6 | IPv4 |
|---|---|---|---|
| 一個 | 1 | ipv6_1 | ipv4_1 |
| 一個 | 2 | ipv6_2 | ipv4_1 |
| b | 7 | ipv6_3 | ipv4_2 |
| b | 7 | ipv6_7 | ipv4_8 |
| e | 2 | ipv6_4 | ipv4_3 |
我提出的查詢
select t1.name,
-- combine role_id column from both the tables and do group_concat on it??
group_concat(DISTINCT t1.dep_id),
group_concat(DISTINCT t2.ipv6),
group_concat(DISTINCT t2.ipv4)
from table1 t1
inner join table2 t2
on t1.name = t2.name
group by t1.name
當前查詢輸出
| 姓名 | group_concat(DISTINCT t1.dep_id) | group_concat(DISTINCT t2.ipv6) | group_concat(DISTINCT t2.ipv4) |
|---|---|---|---|
| 一個 | d1,d2 | ipv6_1,ipv6_2 | ipv4_1 |
| b | d3,d5 | ipv6_3,ipv6_7 | ipv4_2,ipv4_8 |
預期結果
| 姓名 | CONCAT_role_id | group_concat(DISTINCT t1.dep_id) | group_concat(DISTINCT t2.ipv6) | group_concat(DISTINCT t2.ipv4) |
|---|---|---|---|---|
| 一個 | 1,2 | d1,d2 | ipv6_1,ipv6_2 | ipv4_1 |
| b | 2,3,7 | d3,d5 | ipv6_3,ipv6_7 | ipv4_2,ipv4_8 |
uj5u.com熱心網友回復:
而不是加入使用UNION ALL:
WITH
common_names AS (SELECT name FROM table1 INTERSECT SELECT name FROM table2),
cte AS (
SELECT name, role_id, dep_id, null ipv6, null ipv4 FROM table1
UNION ALL
SELECT name, role_id, null, ipv6, ipv4 FROM table2
)
SELECT name,
GROUP_CONCAT(DISTINCT role_id) roles,
GROUP_CONCAT(DISTINCT dep_id) deps,
GROUP_CONCAT(DISTINCT ipv6) ipv6s,
GROUP_CONCAT(DISTINCT ipv4) ipv4s
FROM cte
WHERE name IN common_names
GROUP BY name;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486181.html
上一篇:我需要一個串列中的字典
