SQL查询一个表多个选择

时间:2015-05-23 19:24:01

标签: mysql

我需要帮助来设计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个技能的请求

2 个答案:

答案 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)