假设我有下面的示例数据集:如何改善这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