一個表正在存盤父/子關系。我試圖獲得一個回報,其中條目parent_id將父母姓名 孩子的姓名作為新列回傳。結構如下:
表結構
| label_template_category_id | 姓名 | parent_id | 排序 |
|---|---|---|---|
| 5 | '圣誕節' | 0 | 4 |
| 7 | '父親節' | 34 | 6 |
| 9 | '母親節' | 34 | 8 |
| 10 | '新生兒' | 34 | 9 |
| 11 | '新家' | 34 | 10 |
| 13 | '謝謝' | 0 | 12 |
| 14 | '婚禮' | 0 | 13 |
| 15 | '商業' | 0 | 0 |
| 16 | '情人節' | 34 | 0 |
| 26 | '新年' | 0 | 0 |
| 28 | '退休' | 0 | 0 |
| 29 | “體育賽事/團隊” | 0 | 0 |
| 34 | “慶祝日” | 0 | 0 |
預期成績
| label_template_category_id | 姓名 | parent_id | 排序 | 組的名字 |
|---|---|---|---|---|
| 5 | '圣誕節' | 0 | 4 | '圣誕節' |
| 7 | '父親節' | 34 | 6 | “慶祝日 > 父親節” |
| 9 | '母親節' | 34 | 8 | “慶祝日 > 母親節” |
| 10 | '新生兒' | 34 | 9 | “慶祝日 > 新生嬰兒” |
| 11 | '新家' | 34 | 10 | '慶祝日>新家' |
| 13 | '謝謝' | 0 | 12 | '謝謝' |
| 14 | '婚禮' | 0 | 13 | '婚禮' |
| 15 | '商業' | 0 | 0 | '商業' |
| 16 | '情人節' | 34 | 0 | “慶祝日 > 情人節” |
| 26 | '新年' | 0 | 0 | '新年' |
| 28 | '退休' | 0 | 0 | '退休' |
| 29 | “體育賽事/團隊” | 0 | 0 | “體育賽事/團隊” |
| 34 | “慶祝日” | 0 | 0 | “慶祝日” |
使用以下查詢,我讓所有孩子都回傳父母而不是孩子,就像上面的預期結果一樣。
SELECT
parent.label_template_category_id,
parent.name,
GROUP_CONCAT(child.name SEPARATOR ' > ') group_name
FROM label_template_category parent
LEFT JOIN label_template_category child
ON (child.parent_id = parent.label_template_category_id)
GROUP BY parent.label_template_category_id
ORDER BY group_name
實際回傳結果
| label_template_category_id | 姓名 | parent_id | 排序 | 組的名字 |
|---|---|---|---|---|
| 14 | '婚禮' | 0 | 13 | |
| 15 | '商業' | 0 | 0 | |
| 16 | '情人節' | 34 | 0 | |
| 34 | “慶祝日” | 0 | 0 | '父親節>母親節>新寶貝>新家>情人節' |
我創建了一個用于測驗的SQL Fiddle 。
uj5u.com熱心網友回復:
我不認為你需要一個GROUP_CONCAT()。的順序LEFT JOIN似乎相反。試試這個查詢:
SELECT
child.label_template_category_id,
child.name,
child.parent_id,
child.sort_order,
CASE WHEN parent.name IS NULL THEN child.name ELSE
CONCAT_WS(' > ',parent.name, child.name) END AS group_name
/*or maybe CONCAT_WS(' > ',parent.name, child.name) END AS group_name */
FROM label_template_category child
LEFT JOIN label_template_category parent
ON (child.parent_id = parent.label_template_category_id);
您需要一個帶有CONCAT_WS()函式的CASE陳述句。如您所見,我切換了設定為參考的位置。然后我正在做一個當來自 parent 的結果是它將回傳 column 中的資料時。否則,如果有匹配項,它將與.LEFT JOINchildCASENULLchild.nameparent.namechild.name
演示小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448897.html
上一篇:在可能沒有資料的列上自聯接
