假設我有下面的示例數據集:如何改善這4個自我加入?
emplid | Citizenship |
100001 | USA |
100001 | CAN |
100001 | CHN |
100002 | USA |
100002 | CHN |
100003 | USA |
我想安排它要爲每個員工的國籍一行。我們可以假設一名員工擁有多達四個國籍。輸出應該是這樣的:
emplid | Citizeship_1 | Citizenship_2 | Citizenship_3
100001 | USA | CHN | CAN
100002 | USA | CHN |
100003 | USA | |
唯一可行的解決方案我已經能夠做到這一點是:由於數據集的增長和增長這變得越來越低效
SELECT e.emplid, MAX(e.citizenship) AS citizenship1,
MAX(e1.citizenship) AS citizenship2,
MAX(e2.citizenship) AS citizenship3,
MAX(e3.citizenship) AS citizenship4
FROM employee e
LEFT JOIN employee e1 ON e1.emplid = e.emplid AND e1.citizenship < e.citizenship
LEFT JOIN employee e2 ON e2.emplid = e1.emplid AND e2.citizenship < e1.citizenship
LEFT JOIN employee e3 ON e3.emplid = e2.emplid AND e3.citizenship < e2.citizenship
GROUP BY e.emplid
,但我找不到重寫此查詢的方法。
第一個查詢將在國籍中給逗號分隔值,他必須將值分開使用,如他所願。更好,最好的方法。 – 2014-11-06 18:29:56
第一個確實運行得更快,但第二個告訴我substring_index的參數值不正確。 [小提琴](http://sqlfiddle.com/#!2/c6ced3/9) – AdamMc331 2014-11-06 18:32:53