2016-12-07 2 views
0

Я учусь писать хранимые процедуры. Я хочу иметь три оператора select в моей хранимой процедуре mysql. Операторы второго и третьего выбора требуют результата их оператора верхнего выбора. Я попытался написать следующее. Но не удалось.Несколько операторов выбора в хранимой процедуре mysql

CREATE DEFINER=`root`@`localhost` PROCEDURE `SPTeam`(IN date_x date, OUT emplist3 varchar(200)) 

BEGIN 
SELECT 
(
    select emp_event.employee_id as emplist1 
    from emp_event 
    where emp_event.date = date_x 
), 
(
    select emp_position.employee_id as emplist2 
    from emp_position 
    where FIND_IN_SET(emp_position.employee_id, emplist1)=0 
    AND emp_position.position = "Cameraman" 
), 
(
    select employee.name as emplist3 
    from employee 
    where employee.id IN (emplist2) 
); 
END 

Это ошибка, которую я получил.

Error Code: 1054. Unknown column 'emplist1' in 'where clause' 

Кто-то Пожалуйста, исправьте меня. Спасибо U.

+0

* Но не удалось. * Означает что? Исключение? – Blank

+0

Вы не можете это сделать, вам нужно повторить второй запрос в инструкции IN в третьем, чтобы получить идентификаторы сотрудников – cichy

+0

Другое дело, что вы не можете получить несколько строк в подзапросе, когда поле подвыборки – cichy

ответ

0

Вы можете хранить каждый из отдельных результатов в переменных, а затем сделать выбор на этих переменных:

DECLARE @emp_event as int 
DECLARE @emp_position as int 
DECLARE @emp_employeeName as int 

SET @emp_event = (select emp_event.employee_id from emp_event where emp_event.date = date_x) 
SET @emp_position = (select emp_position.employee_id from emp_position where FIND_IN_SET(emp_position.employee_id, @emp_event)=0 AND emp_position.position = "Cameraman") 
SET @emp_employeeName = (select employee.name from employee where employee.id IN (@emp_position)) 

SELECT @emp_event as emplist1, @emp_position as emplist2, @emp_employeeName as emplist3 
+0

Вы не можете выбрать несколько строк в одну переменную – cichy

0

Если я правильно understeand то, что вам нужно, это будет что-то вроде этого:

select employee.name as emplist3 
    from employee 
    where employee.id IN (
     select emp_position.employee_id 
     from emp_position 
     where emp_position.employee_id IN (
     select emp_event.employee_id 
     from emp_event 
     where emp_event.date = date_x 
    ) 
     AND emp_position.position = "Cameraman" 
    ) 
+0

Спасибо, что так много работает. :) – Christeen