'我有一个数据库,员工被分配到不同的项目。有些项目分为不同的任务。以下数据库结构已创建。'加入具有相同外键的多个表
USER:
+------------+-------------+
| Person ID | Name |
+------------+-------------+
| 1 | A |
| 2 | B |
| 3 | C |
+------------+-------------+
PROJECT_ASSIGNMENT:
+-----------------+-------------+-----------+
| P_Assign key | Project Key | Person ID |
+-----------------+-------------+-----------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
+------------+-------------+------+-----+----
TASK ASSIGNMENT:
+-----------------+-------------+-----------+--------+
| T_Assign key | Project Key | Person ID |task key|
+-----------------+-------------+-----------+--------+
| 1 | 2 | 1 | 1 |
| 2 | 2 | 2 | 1 |
| 3 | 2 | 3 | 1 |
| 4 | 2 | 1 | 2 |
| 5 | 2 | 2 | 2 |
| 6 | 2 | 3 | 2 |
+------------+-------------+------+-----+------------+;
'What type of query would be required to get results like this?'
+-----------------+-------------+-----------+
| Person ID | Project Key | Task Key |
+-----------------+-------------+-----------+
| 1 | 1 | NULL |
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 2 | 1 | NULL |
| 2 | 2 | 1 |
| 2 | 2 | 2 |
| 3 | 1 | NULL |
| 3 | 2 | 1 |
| 3 | 2 | 2 |
+------------+-------------+------+-----+---+
我已经尝试了一些查询,但我认为有相同的外键防止我得到我需要的结果。
SELECT
user.person_ID,
task_assignment.Project Key,
project_assignment.Project Key
FROM user
JOIN dbo.project_assignment
ON project_assignment.person_key=user.person_key
LEFT JOIN dbo.task_assignment
ON dbo.project_assignment.person_key=dbo.task_assignment.person_key
如果一个项目被分成任务,该人被分配到该任务。 如果某个项目未分解成任务,则该人被分配到该项目。
你尝试过什么?请包括示例代码来证明您已经付出了一些努力来解决此问题。 – nrussell 2014-08-29 18:26:45