Oracle多对多关系

cwdobuhd  于 2023-03-22  发布在  Oracle
关注(0)|答案(2)|浏览(190)

我需要一些帮助来建立一个多对多的关系。
我通读了一些文章,似乎需要使用一个包含两个主表ID的交集表来创建一种1-manyMap。
下面是我正在尝试做的一个例子:
员工名单及基本情况EMPLOYEE TABLE
项目清单和项目地点PROJECT TABLE
项目和员工之间的链接表LINK TABLE
我创建了LINK表并输入了数据。基于此,Bob Brown仅被分配到项目A,而大卫Doe被分配到项目A和C。另一方面,项目A分配了三名员工- Bob Brown,David Doe和Sam Smith。
由于Janet Jones没有项目分配,LINK表中没有条目,我不能添加一个(null)PROJ_ID的条目,我该怎么办?

nnt7mjpx

nnt7mjpx1#

如果您的意思是:
如何将没有项目的人员输入链接表?
你不需要,他们没有参与项目,所以没有什么可以链接的,所以他们不需要链接表中的条目。
链接表中的第5行和第6行不应该在链接表中,因为当关系的一方是NULL时没有链接。只需忽略它们并使用OUTER JOIN s或NOT EXISTS来查找这些员工/项目。
例如,如果要查找链接表中没有条目的员工,则:

SELECT *
FROM   employee e
WHERE  NOT EXISTS (
         SELECT 1
         FROM   link l
         WHERE  l.emp_id = e.emp_id
       );

或:

SELECT *
FROM   employee e
       LEFT OUTER JOIN link l
       ON l.emp_id = e.emp_id
WHERE  l.emp_id IS NULL;

如果你想要所有的细节,那么使用FULL OUTER JOIN

SELECT e.*, p.*
FROM   link l
       FULL OUTER JOIN employee e
       ON l.emp_id = e.emp_id
       FULL OUTER JOIN project p
       ON l.proj_id = p.proj_id

fiddle

wlsrxk51

wlsrxk512#

简而言之,什么都没有!它按预期工作。由于Janet没有项目,因此在分配给她一个项目之前,她不会出现在关联表中。
此外,关联表不需要自己的主键。主键是添加条目时由employee和project表的主键组成的组合键。

相关问题