-部门- |部门|旗帜| |:-----|:-----| | D1 |是 | | D2 |是 | | D3 |是 | | D4 |是 |
-员工- |电磁脉冲 |部门|旗帜| |:------|:-----|:-----| |EMP1 |D1 |Y | |EMP1 |D2 |Y | |EMP2 |D1 |Y | |EMP2 |D2 |Y | |EMP2 |D3 |Y | |EMP3 |D3 |Y | |EMP4 |D2 |Y | |EMP4 |D3 |Y |
我需要显示像-
电磁脉冲 | 部门 | 旗帜 |
---|---|---|
电磁脉冲1 | D1 | 是 |
电磁脉冲1 | D2 | 是 |
电磁脉冲1 | D3 | N |
电磁脉冲1 | D4 | N |
电磁脉冲2 | D1 | 是 |
电磁脉冲2 | D2 | 是 |
电磁脉冲2 | D3 | 是 |
电磁脉冲2 | D4 | N |
电磁脉冲3 | D1 | N |
电磁脉冲3 | D2 | N |
电磁脉冲3 | D3 | 是 |
电磁脉冲3 | D4 | N |
电磁脉冲4 | D1 | N |
电磁脉冲4 | D2 | 是 |
电磁脉冲4 | D3 | 是 |
电磁脉冲4 | D4 | N |
我无法从所有员工那里获取“N”条记录。如果我通过外连接传递单个员工,那么我就可以得到。但如果我通过了所有员工的测试,我只会得到“Y”记录。
您需要一种交叉联接方法来生成所有部门和员工的中间表。 然后将其左连接到右侧的表格以获得您想要的结果。
SELECT e.emp, d.dept, COALESCE(t.flag, 'N') AS flag
FROM dept d
CROSS JOIN (SELECT DISTINCT emp FROM emp) e
LEFT JOIN emp t
ON t.dept = d.dept AND
t.emp = e.emp
ORDER BY e.emp, d.dept;