【发布时间】:2009-09-14 14:17:18
【问题描述】:
我正在开发一个员工预订应用程序。我有两个不同的实体项目和用户,它们都分配了可变数量的技能。
我有一个包含各种技能的技能表(列:id、name) 我在一个名为 UserSkills 的表中注册了用户技能(有两个外键列:fk_user 和 fk_skill) 我在另一个名为 ProjectSkills 的表中注册项目技能(具有两个外键列:fk_project 和 fk_skill)。
一个项目可能需要 6 种不同的技能,用户在注册时也会设置他们的技能。
棘手的部分是我必须根据他们的技能为我的项目寻找用户。我只对满足项目所需技能的用户感兴趣。因为允许用户拥有比所需技能更多的技能。
以下代码不起作用,(即使它起作用,也不会对性能非常友好),但它说明了我的想法:
SELECT * FROM Users u WHERE
( SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id )
>=
( SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id] )
我正在考虑制作我自己的带有两个 TABLE 变量的函数,然后计算其中的比较(一种修改后的 IN 函数),但我宁愿找到一个性能更友好的解决方案。
我正在 SQL Server 2008 上进行开发。
我非常感谢任何关于此的想法或建议。谢谢!
【问题讨论】:
标签: sql sql-server tsql sql-server-2008