MySQL存储过程仅返回带有子记录的记录

时间:2015-11-02 12:02:47

标签: mysql stored-procedures nested-if

我有一个表,task,在表中有一个外键,注释。

+-------------+   +-----------+
|Task         |   |Comment    |
+-------------+   +-----------+
|t_id (PK)    |   |c_id (PK)  |
|t_title      |   |c_task (FK)|
|t_description|   |c_comment  |
|t_state      |   |c_date     |
+-------------+   +-----------+

我需要获取所有任务,并且从最后一条评论开始计算,如果有的话,我需要知道要订购什么或删除具有特定状态的记录。所有都在同一程序中。 我现在的问题是,如果我尝试这样做,我只会得到附有评论的任务。如果任务没有附加评论,则不会显示。

create procedure getalltask(state boolean,  orderby varchar(30))
begin
IF state = true then
   select 
      t_id,  
      t_title, 
      t_description, 
      t_state,
      DATE_FORMAT(c_date, '%e/%c %H:%i') as c_datetime
   from task, comment
   where task.t_state = orderBy
      and task.t_id = comment.c_task
      and c_date IN 
   (
   select MAX(c_date) 
   from comment 
   where task.t_id = comment.c_task
      and MAX(c_id)
   )

ELSE
   select 
      t_id, 
      t_title, 
      t_description, 
      t_state, 
      DATE_FORMAT(c_date, '%e/%c %H:%i') as c_datetime,
      @nextid := DATE_FORMAT(c_date, '%e/%c %H:%i'),
      c_date
   from task, comment
      and task.t_id = taskcomment.c_task
      and c_date IN 
   (
   select MAX(c_date) 
   from comment 
   where task.t_id = comment.c_task
   )
   order by orderby
end if;
end$$

我试过嵌套了,但是这似乎没有用,而且我的存储过程和函数也存在问题,但也许你有一些想法,建议,解决方案?

1 个答案:

答案 0 :(得分:0)

您的sql语句正在执行内部联接,您应该在任务和注释表之间执行左连接,如果有注释,则会返回带注释的所有任务,这意味着没有注释的任务将具有空白/可空值。