【问题标题】:Multiple select statements in mysql stored proceduremysql存储过程中的多个select语句
【发布时间】:2016-12-07 12:20:12
【问题描述】:

我正在学习编写存储过程。我想为我的 mysql 存储过程添加三个 select 语句。 第二个和第三个 select 语句需要它们上面的 select 语句的结果。 我试着写如下。但没有成功。

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'   

有人请纠正我。 谢谢你。

【问题讨论】:

  • 但没有成功。是什么意思?例外?
  • 你不能这样做,你需要在第三个IN语句中重复第二个查询以获得员工ID
  • 还有一个问题是子查询时分选字段时无法获取多行数据
  • @Forward 我用我得到的错误编辑了这个问题。请检查一下。
  • @cichy 没有合适的方法吗?

标签: mysql stored-procedures


【解决方案1】:

您可以将每个选择结果存储在变量中,然后对这些变量进行选择:

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

【讨论】:

  • 您不能将多行选择到单个变量中
【解决方案2】:

如果我正确理解你的需要,它会是这样的:

   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"
   )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多