MYSQL从两个不同的表中选择数据,没有公共变量名

时间:2013-11-19 04:12:23

标签: mysql sql select

我有两个表:员工和客户。客户有客户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') ;

4 个答案:

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