使用java查询数据数据库,两个表的记录按时间倒排怎么查询

发布于 2022-09-12 22:58:07 字数 2785 浏览 22 评论 0

在mysql有两个表

code_task 主任务表
task_version 子任务表

现在code_task有五个主任务

主任务1
主任务2
主任务3
主任务4
主任务5

现在task_version有三个子任务

子任务1 属于主任务1
子任务2 属于主任务1
子任务3 属于主任务3

然后我想查询到这样的数据

主任务1 含有子任务1信息
主任务1 含有子任务2信息
主任务2
主任务3 含有子任务3信息
主任务4
主任务5

请问如何实现

DROP TABLE IF EXISTS `code_task`;
CREATE TABLE `code_task` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '任务ID', `title` varchar(100) NOT NULL COMMENT '标题', `userID` int(11) NOT NULL COMMENT '任务创建人', `content` varchar(10000) DEFAULT NULL COMMENT '任务要求', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `tags` varchar(50) DEFAULT NULL COMMENT '标签', `status` varchar(10) DEFAULT NULL COMMENT '任务状态', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8 COMMENT='任务';
DROP TABLE IF EXISTS `task_version`;
CREATE TABLE `task_version` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '任务ID', `version` varchar(100) NOT NULL COMMENT '版本号', `userID` int(11) NOT NULL COMMENT '版本创建人', `taskID` int(11) NOT NULL COMMENT '版本所属任务ID', `code` varchar(10000) DEFAULT NULL COMMENT '版本执行代码', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `test_result` varchar(1000) DEFAULT NULL COMMENT '版本测试结果', `remark` varchar(1000) DEFAULT NULL COMMENT '版本备注内容', `status` varchar(10) DEFAULT NULL COMMENT '版本状态', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='任务提交版本';

补充

还有一个信息状态表

DROP TABLE IF EXISTS `task_status`;
CREATE TABLE `task_status` (
 `id` int(11) NOT NULL COMMENT '任务状态ID',
 `explanation` varchar(30) NOT NULL COMMENT '任务状态说明', 
 PRIMARY KEY (`id`)
 ) 
 ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='任务状态';

我现在使用这个句子查询,我想把子任务的状态status变成中文,如何实现?

select ct.id, ct.title, ct.status, ts.explanation as explanation, tv.status as versionStatus from code_task ct
left join task_version tv on ct.id = tv.taskID left join task_status ts on ct.status = ts.id
WHERE ct.status = '0' or tv.status = '0'
ORDER BY ct.update_date DESC;

image

继续补充一下

select ct.id, ct.title, ct.status, ts.explanation as explanation, tv.status as versionStatus, 
(select explanation from task_status where id = tv.id) as versionExplanation from code_task ct
left join task_version tv on ct.id = tv.taskID left join task_status ts on ct.status = ts.id
WHERE ct.status = '0' or tv.status = '0'
ORDER BY ct.update_date DESC;

改成这样了,是够存在冗余

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绳情 2022-09-19 22:58:07

通过left join(左连接)保留code_task表的全部数据,关联不上的补充null就行了

select * from code_task as ta left join task_version as tb on  ta.id = tb.id order by tb.create_time desc
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文