使用java查询数据数据库,两个表的记录按时间倒排怎么查询
在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;
继续补充一下
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过left join(左连接)保留code_task表的全部数据,关联不上的补充null就行了