码迷,mamicode.com
首页 > 数据库 > 详细

一个关于MySQL瞎探讨

时间:2018-12-13 17:48:26      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:优化   思考   rom   报错   答案   nbsp   程序   扯淡   order   

一个关于MySQL瞎探讨

闲暇的时候自己做着玩的小object,需要一个上一篇下一篇的sql语句这就是扯淡的故事背景!

假设当前有表 log ,字段 id,title,共7条记录.当前已知 id=4,请查找出 id>4 和 id <4  的id记录, 要求用一条sql语句.为了实现程序优化,如此逼迫自己,也是带有极致的自虐倾向,

题目出来了,想了好久,当时一门心思用子查询实现,在验证了不知道几次后,看到数据库的语法报错,一度怀疑,这个想法的可行性.于是想几个伙伴发出求解的QQ消息,结果都是懵逼,

当我删除代码放弃这烧脑的想法时,忽然就那么醒悟了.我可以类链接呀

语句

SELECT a.id,a.title,b.id AS id2,b.title AS title2 FROM log AS a  INNER JOIN log AS b WHERE a.id < 4 AND b.id > 4 ORDER BY a.id DESC LIMIT 1 
结果

id   title           id2    title2

3 这是一篇日志 5 我的活着是为了等死

我擦,真的可以吗?冷静后仔细一思考,这样的查询会在id等于最大/最小值时,就查不到数据了,比如id是7和1,不太完美但也还可以,好评4分吧

我把这个语句,发给伙伴们.不久后好消息结着就到了,伙伴给出的语句

SELECT id,title FROM log WHERE id IN (  (SELECT max(id) FROM log WHERE id < 4),4,(SELECT min(id) FROM log WHERE id > 4))
结果也是可行的,不过得到数据还要2次处理,并且这条语句是近似一条语句的子查询语句,(应该不是很贴题)好评4分

这条也是子查询的方法,不在表述

SELECT id,title FROM log WHERE id = (SELECT id FROM log WHERE id<4 ORDER BY id DESC LIMIT 1) OR id = (SELECT id FROM log WHERE id>4 ORDER BY id ASC LIMIT 1)

在分享一条扯淡的sql

SELECT id-1,title FROM log WHERE id >2;

扯了好久,也没个5分的答案,可能是老张才学疏浅,期待大神的执笔赐教!

一个关于MySQL瞎探讨

标签:优化   思考   rom   报错   答案   nbsp   程序   扯淡   order   

原文地址:https://www.cnblogs.com/daylog/p/10115203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!