2013-04-16 66 views
1

以下是我试图回答的提示:为什么我的嵌套查询语句不工作?

编写嵌套语句以列出与Larry Smith具有相同工作的员工的名字和姓氏。

下面是雇员表列:

EMPLOYEE(Emp_Num,emp_lname的,Emp_Fname,Emp_Initial,Emp_HireDate,JOB_CODE)

以下是我的嵌套查询:

select emp_fname, emp_lname 
from EMPLOYEE 
where job_code = 
(select job_code 
from employee 
where emp_fname = 'larry' 
and emp_lname = 'smith'); 

为什么这不工作?

+0

出了什么问题?是否有错误讯息? – showdev

+0

你的查询对我来说很好。我宁愿将查询写成连接或使用'EXISTS'子查询,但这是完全有效的。唯一的问题是如果子查询返回多行。在这种情况下,这不仅仅是我的偏好,而且实际上更好的是切换到真正的“JOIN”。对使用IN的子查询和使用IN的子查询使用'IN'的查询难以理解和修改,而且完全没有必要!专家SQL编写者不会以这种方式编写查询。 – ErikE

+0

感谢您的评论,它不工作的原因是因为我删除了“拉里史密斯”是其中之一的一些元组。另外,我被告知你总是可以做一个嵌套查询,而不是一个连接,因为它使用较少的资源。 –

回答

3

您应该使用IN没有=

select emp_fname, emp_lname 
from EMPLOYEE 
where job_code IN 
    (select job_code 
    from employee 
    where emp_fname = 'larry' 
    and emp_lname = 'smith'); 

原因是,您比较的值与子查询返回的集合中。

+0

虽然查询仍然适用于“=”,但我对你有利,因为我的教授总是强调“IN”。问题是我忘了我删除了一些“拉里史密斯”就是其中之一的元组。尽管谢谢你的回答。让我们说拉里史密斯还在那里。在结果中,我将如何将“拉里史密斯”的结果返回给我? –

+1

使用“NOT IN”作为子查询前面的操作符。 –

+0

@PieterGeerkens说了些什么。 – PinnyM