我有一个严重的SQL问题,已经花了我3个小时。我有两张这样的桌子:
第一张表:员工
ID | NAME
---+--------
1 | John
2 | Mike
3 | Robert
第二个表:客户
ID | NAME | EMPLOYEES
---+---------+--------------
1 | Michael | 2,3
2 | Julia | 1
3 | Mila | 1,2,3
我希望输出如下:
Michael | Mike, Robert
Julia | John
Mila | John, Mike, Robert
SQL命令应该获得预期的输出?
答案 0 :(得分:4)
这是一个糟糕的数据结构,你应该修复它。这是主要的事情。将数字存储为字符串很糟糕。在列中存储多个值很糟糕。不宣布外键关系是不好的。
那就是说,如果其他人设置了这样一个数据库并以这种糟糕的方式这样做,你能做什么?好吧,你可以这样做:
select c.*, e.name
from customers c join
employees e
on ',' + cast(e.id as varchar(255)) + ',' like '%,' + c.employee_id + ',%';
请注意,无法使用常规SQL方法(例如索引)优化此查询,因为JOIN
条件过于复杂。
这将为您提供比您要求的更多行:
Michael Mike
Michael Robert
Julia John
Mila John
Mila Mike
Mila Robert
但是,这是SQL正常工作的方式,所以你应该习惯它。
答案 1 :(得分:4)
Select A.Name
,Employees = (Select Stuff((Select Distinct ',' +Name From Employees Where charindex(','+cast(ID as varchar(25))+',',','+A.EMPLOYEE_ID+',')>0 For XML Path ('')),1,1,'') )
From Customers A
返回
Name Employees
Michael Mike,Robert
Julia John
Mila John,Mike,Robert