小编典典

如何从另一个表中获得具有匹配ID的另一个表中的名称?

sql

我在我的网站中使用带有php的sql server 2008 r2。我有2张桌子。

1是给员工的。

(int)      (nvarchar)   (nvarchar)

id         name        type
 1         john         2
 2         peter        1
 3         leah         2
 4         frank        1
 5         tang         3

2是上班

(int)      (nvarchar)   (nvarchar)

workid      name        employees
  1         task1       1,3
  2         task2       2,3
  3         task3       1,3,4
  4         task4         2

我想进行查询,以便给我提供类型为<3的员工姓名的工作描述。

就是说我想得到这样的结果。

workid       name       employee
  1          task1      john, leah
  2          task2      peter, leah
  3          task3      john,leah,frank

同样地

那么我如何使用sql查询实现此结果呢?

我无法更改表架构。

我试图与case语句一起使用,但无法正常工作。

请帮我使这个工作..


阅读 158

收藏
2021-03-23

共1个答案

小编典典

它的内容并不能完全回答问题,但是会建议您如何正确规范化表以简化问题。

这是一种Many-to-Many关系。

Employees
- ID (Primary Key)
- Name
- Type

Task
- ID (Primary Key)
- Name

Work
- EmployeeID (Foreign Key)
- TaskID (Foreign Key)

员工表

id         name        type
 1         john         2
 2         peter        1
 3         leah         2
 4         frank        1
 5         tang         3

任务表

 id         name        
  1         task1       
  2         task2       
  3         task3       
  4         task4

工作表

TaskID  EmployeeID
1           1
1           3
2           2
2           4
3           1
3           2
3           3
4           4

询问,

SELECT  t.ID, t.Name,
        STUFF(
        (SELECT ',' + b.Name
        FROM    Work a
                INNER JOIN Employee b
                    ON a.EmployeeID = b.ID
        WHERE   a.TaskID = t.ID 
        FOR XML PATH (''))
        , 1, 1, '')  AS NamesList
FROM    Task t
-- WHERE    ..... -- add additional conditions...
GROUP   BY t.ID, t.Name
2021-03-23