0
這個問題是我前一個問題的繼續,可以找到here。如何使用數據引用的* _id字段來分隔/格式化string_agg()聚合數據?
This SQLFiddle正在使用數據庫結構&查詢,我在下面描述。
數據庫看起來像:
CREATE TABLE artistnames (
artistname_id SERIAL PRIMARY KEY,
artistname TEXT UNIQUE NOT NULL
);
CREATE TABLE artistalias (
artistalias_id SERIAL PRIMARY KEY,
artistname_id SERIAL REFERENCES artistnames (artistname_id),
artistalias TEXT UNIQUE NOT NULL
);
CREATE TABLE songs (
song_id SERIAL PRIMARY KEY,
song TEXT NOT NULL,
artistalias_id SERIAL REFERENCES artistalias (artistalias_id)
);
- 一個藝術家(表artistnames)可以有零個,一個或多個別名
- 一個別名(表artistalias)屬於一個藝術家
- 一個歌曲(表歌曲)有一個或多個藝術家(並且指的是他用來執行歌曲的藝術家的別名)
示例: 藝術家Francis Veigar也使用別名Francis Fat和Francis Fighter。一首歌歌1已經發布了藝術家的名字弗朗西斯Veigar,爲另一首歌曲宋2他用化名弗朗西斯脂肪和第三首歌曲歌曲3他使用別名弗朗西斯戰鬥機唱,連同另一位藝術家Peeka Boo。
使用查詢
SELECT
string_agg(distinct(artistname), ' & ') AS artist_primary_name,
string_agg(distinct(a1.artistalias), ' & ') AS performed_song_with_alias,
string_agg(a2.artistalias, ' & ') AS other_pseudonymes,
song
FROM
artistalias a1
left JOIN artistalias a2 ON a2.artistname_id = a1.artistname_id
left JOIN songs s ON s.artistalias_id = a1.artistalias_id
left JOIN artistnames ON artistnames.artistname_id = a1.artistname_id
GROUP BY song;
顯示other_pseudonymes
柱像
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| artist_primary_name | performed_song_with_alias | other_pseudonymes | song |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar | Francis Veigar | Francis Veigar & Francis Fat & Francis Fighter | Song 1 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar | Francis Fat | Francis Veigar & Francis Fat & Francis Fighter | Song 2 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar & Peeka Boo | Francis Fighter & Peeka Boo | Francis Veigar & Francis Fat & Francis Fighter & Peeka Boo & Peeka | Song 3 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Peeka Boo | Peeka | Peeka Boo & Peeka | Song 4 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
我希望它看起來像
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| artist_primary_name | performed_song_with_alias | other_pseudonymes | song |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar | Francis Veigar | Francis Veigar & Francis Fat & Francis Fighter | Song 1 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar | Francis Fat | Francis Veigar & Francis Fat & Francis Fighter | Song 2 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Francis Veigar & Peeka Boo | Francis Fighter & Peeka Boo | Francis Veigar & Francis Fat & Francis Fighter/Peeka Boo & Peeka | Song 3 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
| Peeka Boo | Peeka | Peeka Boo | Song 4 |
+----------------------------+-----------------------------+--------------------------------------------------------------------+--------+
分離pseudonymes /別名兩種不同的藝術家正在使用'/'。在查詢中需要改變什麼才能實現這個目標?