如何检索两个表下有多对多关系的记录?

时间:2013-02-19 18:12:25

标签: sql sql-server sql-server-2008 tsql

我有两张桌子:

1)employee包含以下列:e_ide_nameaddress;

2)project包含以下列:p_idp_namestart_DateEnd_Date

这两个表之间存在多对多的关系。

如何存储此关系以及如何查询检索"他正在工作的员工详细信息和项目详细信息"?

1 个答案:

答案 0 :(得分:1)

您需要一个交叉参考表:

EmployeeProjectXref: e_id, p_id

e_id和p_id的组合可以是此外部参照表的主键。

然后,如果@e_id是一个包含所选员工ID的变量:

SELECT E.e_name, P.p_name
FROM EmployeeProjectXref EPX
JOIN Employee E ON E.e_id = EPX.e_id
JOIN Project P ON P.p_id = EPX.p_id
WHERE EPX.e_id = @e_id
ORDER BY P.Name

有关更多详细信息,请将它们添加到SELECT列表中。例如:SELECT E.e_name,E.address,P.p_name,P.start_date,P.end_date等。这里E是Employee表的别名,P是Project表的别名。此查询将为EmployeeProjectXref表中的每个条目返回一行(前提是它引用了Employee和Project表中的实际条目。)如果有一个员工和三个项目,则将获得三行。