我有两个表。学生和工作。 我需要搜索拥有所有工作所需技能的学生。从两个表中查询匹配的逗号分隔值
Student Job
StudentId MandSkills JobPostId MandSkills
208 2,16,17 36 2,16,18
209 2,16
210 2,18,34
211 2,16,17
212 2,17,16,23
213 2,16,17
214 2,16,17
215 2,18,17,28
217 2,16,17
我已书写的查询
SELECT
S.StudentId, S.MandSkills, JP.items
FROM
Split((SELECT MandSkills FROM JobPosts WHERE JobPostId = 36),',') JP,
Students S
WHERE
JP.items IN (SELECT items FROM Split(S.MandSkills,','))
[拆分()得到逗号分隔的字符串值作为输入,并以表格的形式返回不同的值]
返回这样的结果:
studentId MandSkills items
208 2,16,17 2
209 2,16 2
210 2 2
211 2,16,17 2
212 2,16,17 2
213 2,16,17 2
214 2,16,17 2
215 2,16,17 2
217 2,16,17 2
218 2,16,17,26 2
219 2,16 2
221 2,16 2
208 2,16,17 16
209 2,16 16
211 2,16,17 16
212 2,16,17 16
213 2,16,17 16
214 2,16,17 16
215 2,16,17 16
217 2,16,17 16
218 2,16,17,26 16
219 2,16 16
220 16,17 16
221 2,16 16
它只检查一项技能。
我想选择具有三种技能的学生。
请帮我一把。
在此先感谢。
-Aarti
在单个列中存储像技能这样的信息的整个列表是** BAD **数据库设计。我们有什么表格和关系?我会重新设计你的设计到一张桌子学生,一张桌子的技能,以及两者之间的链接表 - 这样,你可以为任何学生分配任意数量的技能。也以同样的方式将技能表链接到您的工作。 – 2011-04-01 09:54:05
1)你的表可能不在1NF,因为'MandSkills'包含非标量数据,当然SQL(服务器)不太适合查询这样的数据,所以模型对每个值使用一行; 2)您需要的关系运营商称为“关系部门”,例如google。 http://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/ – onedaywhen 2011-04-01 10:03:31
我感谢您的建议。我也知道这是一个糟糕的数据库设计,但是一个网站是实时的,并且存储了大量的数据。由于一些需求变化,我需要做这样的设计数据库。现在不可能重新设计数据库。谢谢。 – simplyaarti 2011-04-01 10:14:39