我需要帮助来设计SQL语句。它将在Web服务器后端动态创建,具体取决于请求。这将过滤数据库以获得所需的结果。
以最简单的形式描述我的需要:
一张桌子,两个区域,50名员工,30个技能。
示例:
staff_id, skill_id
1, 1
1, 2
1, 3
1, 4
2, 2
2, 3
2, 4
3, 2
4, 3
问:谁有技巧3 答:工作人员1,2,4 (这很容易)
问:谁有技巧2和3 答:工作人员1,2
实际查询将有5或6个技能的请求
答案 0 :(得分:0)
考虑到技能的数量不时变化,通过临时表来处理这个问题的最佳方法。这里是伪代码......语法需要修复。
create procedure my_procedure(string of skillsets)
begin
create table #tmp_skillsets(skillset smallint)
foreach skillset in skillsets
insert into #tmp_skillsets(convert_to_smallint(skillset))
select distinct staff from myTable, #tmp_skillset
where myTable.skillset = #tmp_skillsets
end
将此过程称为:"exec my_procedure("1456") or "exec my_procedure("179248503")
答案 1 :(得分:0)
我认为这应该有效:
SELECT DISTINCT staff_id
FROM oneTable t
WHERE EXISTS (SELECT 1 FROM oneTable ti WHERE t.staff_id = ti.staff_id AND ti.skill_id = 2)
AND EXISTS (SELECT 1 FROM oneTable ti WHERE t.staff_id = ti.staff_id AND ti.skill_id = 3)