2013-11-19 1 views
0

У меня есть две таблицы: Employee and Customer. Клиент имеет идентификатор клиента, имя, состояние cust, cust rep #, а сотрудник имеет имя сотрудника, фамилию, номер телефона сотрудника, номер сотрудника. Номер сотрудника = Cust Rep #.MYSQL Выбор данных из двух разных таблиц и отсутствие общего имени переменной

Я пытаюсь извлечь имя, фамилию и номер телефона сотрудника, которые обслуживают клиентов, которые живут в ЦС. Это то, что я имел в качестве кода, но я получаю сообщение об ошибке сказав, что это возвращает более одной строки

SELECT EMP_LNAME, 
     EMP_FNAME, 
     EMP_PHONE 
FROM employee 
WHERE EMP_NBR = 
       (SELECT CUST_REP 
       FROM customer 
       WHERE CUST_STATE='CA') ; 

ответ

0

Что происходит, что ваш внутренний запрос возвращает несколько строк, поэтому изменить его where EMP_NBR in получить все матчи.

Проблема, которую имеет ваш запрос, состоит в том, что не имеет смысла говорить = (a set which returns multiple rows), так как неясно, что именно должно быть согласовано.

+0

Большое вам спасибо. Это сработало чудеса. – Freewill

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 (или перекрестное соединение с ГДЕ фильтр), чтобы, возможно, сделать это более эффективно:

SELECT EMP_LNAME, EMP_FNAME, EMP_PHONE 
FROM employee 
INNER JOIN customer ON employee.EMP_NBR = customer.CUST_REP 
WHERE customer.CUST_STATE = 'CA'; 
+0

благодарим вас за ответ !!! – Freewill

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' 

Вы получаете это сообщение об ошибке, поскольку в Калифорнии есть несколько клиентов. Это не будет проблемой с вышеуказанным запросом.

+0

благодарим вас за ответ !!! – Freewill

0
SELECT EMP_LNAME, 
     EMP_FNAME, 
     EMP_PHONE 
FROM employee 
WHERE EMP_NBR IN 
       (SELECT CUST_REP 
       FROM customer 
       WHERE CUST_STATE='CA') ; 
+0

благодарим вас за ответ !!! – Freewill

Смежные вопросы