我不知道這是否是可能的,但我想我可以問返回值
我有家庭和亞科(family_table)的表:
family_id family_name parent_id
1 Family 1 null
2 Family 2 null
3 Subfamily 1.1 1
4 Subfamily 1.2 1
5 Family 3 null
6 Subfamily 2.1 2
然後,我有一個複雜的選擇返回一些family_id,如2,4
那我就需要返回以下信息:
principal_id family_name subfamily_id subfamily_name
2 Family 2 null null
1 Family 1 4 Subfamily 1.2
編輯:我不介意改變如何顯示結果或改變別的東西,只要它足夠清楚。
這是我到目前爲止已經完成:
SELECT
CASE
WHEN ft.parent_id IS NULL THEN
ft.family_id
ELSE
ft.parent_id
END AS principal_id,
/*I was thinking something like this, but I don't know how to select another row value here, or if there would be another way
CASE
WHEN ft.parent_id IS NULL THEN
ft.family_name
ELSE
*Family name from the parent*
END AS family_name*/
FROM
family_table ft
LEFT JOIN family_table ft2 ON ft2.parent_id = ft.family_id
WHERE
ft.family_id IN (2,4/*complicated select*/)
編輯:此嘗試BELOW是行不通的,因爲它把結果返回從亞科作爲一個家庭,它不加入我需要的子系列的父母ID。
或者,也許是這樣的:
SELECT
ft.family_id as principal_id,
ft.family_name as family_name,
ft2.family_id as subfamily_id,
ft2.family_name as subfamily_name
FROM ft.family_table
LEFT JOIN ft2.family_table ON ft2.parent_id = ft.family_id
WHERE
/*ft.family_id OR ft2.parent_id*/ IN (2,4/*complicated select*/)
我不想做ft.family_id IN (2,4/*complicated select*/) OR cf2.parent_id IN (2,4/*complicated select*/)
重複滔天的選擇。 我有我過於複雜一切的感覺......
這最終的查詢,以接受的答案進去(萬一有人不知道)
SELECT
COALESCE (ft2.family_id, ft.family_id) AS family_id,
COALESCE (ft2.family_name, ft.family_name) AS family_name,
CASE WHEN ft.parent_id IS NOT NULL THEN ft.family_id
END AS subfamily_id,
CASE WHEN ft.parent_id IS NOT NULL THEN ft.family_name
END AS subfamily_name
FROM family_table ft
JOIN (/* complicated select */) AS t ON t.family_id IN (ft.family_id, ft.parent_id)
LEFT JOIN family_table ft2 ON ft2.family_id = ft.parent_id
上次嘗試使用自連接的問題究竟是什麼?這正是我會用的。 – Shadow
然後加入到複雜的選擇和使用簡單的'COPLICATED_SELECT_COLUMN IN(PARENT_ID,family_id)' – sagi
@Shadow,問題是ft.family_id OR IN cf2.parent_id(2,4/*複雜SELECT * /)不工作,我不想在IN內重複選擇,因爲它非常長,而且需要很長時間。 – Tyrannogina