可以而且应该从子查询中循环查询返回吗?

时间:2018-05-20 16:31:23

标签: mysql

我有一个查询,它返回在公司具有特定技能的员工的员工ID。

SELECT competences.employee_id
FROM competences
WHERE service_id = 2) 

返回

1
2
4
7

我现在想使用此查询返回来查找这些员工的姓名 来自员工表。我试过这个,当然没有用,但可以弄明白怎么做。

SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.employee_id = 
(SELECT competences.employee_id
FROM competences
WHERE service_id = 2) 

如何使用子查询来获取员工?

3 个答案:

答案 0 :(得分:1)

这是JOIN的工作。你应该读一下JOIN。许多教程都可用。 Here is one

尝试这样的事情:

 SELECT DISTINCT employee.first_name, employee.last_name
   FROM employee
   JOIN competences ON employee.employee_id = competences.employee_id
  WHERE competences.srvice_id = 2

使用IN会产生与JOIN相同的结果。但是它使用了一个所谓的从属子查询,当你的表变大时,它可能对性能非常不利。 DISTINCT删除任何可能的重复员工姓名。如果我们知道列的名称和含义,我们可以提供更具体的建议来生成最有用的查询。

答案 1 :(得分:0)

使用'in'代替等号

SELECT employee.first_name, employee.last_name
FROM employee
WHERE employee.employee_id in 
(SELECT competences.employee_id
FROM competences
WHERE service_id = 2)

答案 2 :(得分:0)

您可以简单地使用IN代替“=”

SELECT first_name, last_name
FROM employee
WHERE employee_id IN (SELECT employee_id
                        FROM competences
                       WHERE service_id = 2)