我有一个表,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$$
我试过嵌套了,但是这似乎没有用,而且我的存储过程和函数也存在问题,但也许你有一些想法,建议,解决方案?
答案 0 :(得分:0)
您的sql语句正在执行内部联接,您应该在任务和注释表之间执行左连接,如果有注释,则会返回带注释的所有任务,这意味着没有注释的任务将具有空白/可空值。