我有两个表:员工和客户。客户有客户ID,姓名,客户状态,客户代表#和员工有员工名字,姓氏,员工电话号码,员工编号。 员工人数= Cust Rep#。
我正在尝试提取为CA中的客户提供服务的员工名字,姓氏和员工电话号码。这就是我作为代码所拥有的,但我得到一个错误,说它返回多行
SELECT EMP_LNAME,
EMP_FNAME,
EMP_PHONE
FROM employee
WHERE EMP_NBR =
(SELECT CUST_REP
FROM customer
WHERE CUST_STATE='CA') ;
答案 0 :(得分:0)
发生的事情是你的内部查询返回多行,因此将其更改为where EMP_NBR in
以检索所有匹配。
您的查询存在的问题是说= (a set which returns multiple rows)
没有意义,因为不清楚究竟应该匹配什么。
答案 1 :(得分:0)
当期望在子查询中返回一组结果时(而不是单个标量结果),请使用IN()
而不是=
:
select EMP_LNAME,EMP_FNAME,EMP_PHONE
from employee
where EMP_NBR IN (
select CUST_REP from customer where CUST_STATE='CA'
);
或者,您可以使用INNER JOIN(或带有WHERE过滤器的CROSS JOIN)来更有效地执行此操作:
SELECT EMP_LNAME, EMP_FNAME, EMP_PHONE
FROM employee
INNER JOIN customer ON employee.EMP_NBR = customer.CUST_REP
WHERE customer.CUST_STATE = 'CA';
答案 2 :(得分:0)
您不需要嵌套查询 - 最好像这样编写您的查询
select employee.emp_lname, employee.emp_fname, employee.emp_phone
from employee inner join customer
on employee.emp_nbr= customer.cust_rep
where customer.cust_state = 'CA'
您收到该错误消息,因为加利福尼亚州有多个客户。对于上述查询,这不会有问题。
答案 3 :(得分:0)
SELECT EMP_LNAME,
EMP_FNAME,
EMP_PHONE
FROM employee
WHERE EMP_NBR IN
(SELECT CUST_REP
FROM customer
WHERE CUST_STATE='CA') ;