标签:优化 思考 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分的答案,可能是老张才学疏浅,期待大神的执笔赐教!
标签:优化 思考 rom 报错 答案 nbsp 程序 扯淡 order
原文地址:https://www.cnblogs.com/daylog/p/10115203.html