需要有关 Oracle Join 的帮助

问题描述 投票:0回答:1

enter image description here我有2张桌子-

-部门- |部门|旗帜| |:-----|:-----| | 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”记录。

sql oracle11g
1个回答
0
投票

您需要一种交叉联接方法来生成所有部门和员工的中间表。 然后将其左连接到右侧的表格以获得您想要的结果。

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;
© www.soinside.com 2019 - 2024. All rights reserved.