Sql 如何检索两个表之间具有多对多关系的记录?

Sql 如何检索两个表之间具有多对多关系的记录?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有两张桌子: 1) employee带列:e\u id,e\u name,address 2) 项目包含以下列:p\u id,p\u name,开始日期,结束日期 这两个表之间存在多对多关系 如何存储此关系,以及如何查询以检索“员工详细信息和他正在工作的项目详细信息”您需要一个交叉引用表: EmployeeProjectXref: e_id, p_id e_id和p_id的组合可以是此外部参照表的主键 然后,如果@e_id是保存所选员工id的变量: SELECT E.e_name, P.p_

我有两张桌子:

1)
employee
带列:
e\u id
e\u name
address

2)
项目
包含以下列:
p\u id
p\u name
开始日期
结束日期

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


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

您需要一个交叉引用表:

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

有关详细信息,请将其添加到选择列表中。例如:选择E.E_名称、E.address、P.P_名称、P.start_日期、P.end_日期等。这里E是员工表的别名,P是项目表的别名。此查询将为EmployeeProjectXref表中的每个条目返回一行(前提是它引用了Employee表和Project表中的实际条目)。如果有一名员工和三个项目,您将得到三行。

Thank you@criticalfix,我还有一个问题,我如何编写具有相关工作项目详细信息的insert employee detail查询?对于每个记录,对于每个表,您将需要一个insert语句。例如,交叉引用表的insert语句如下所示:insert EmployeeProjectXRef(e_id,p_id)值(3101)@Naganath我的建议有用吗?(你知道,如果答案有用的话,你可以接受它们或投票。)非常感谢@criticalfix它非常有用