gpt4 book ai didi

mysql 在子查询中返回同一表中上一个和下一个的多列

转载 作者:行者123 更新时间:2023-11-29 23:29:34 25 4
gpt4 key购买 nike

我正在尝试编写一个mysql查询,该查询在一行中返回给定行的字段,以及与“上一个”位置匹配的行中的一些字段,以及“下一个”位置。我对 mysql 还很陌生,但是对于在网上寻找答案的所有搜索,这是我能做的最好的事情:

SELECT *, 
(select id
from mytable t2
where t2.added_on < t.added_on
order by t2.added_on DESC
limit 1
) as prev_id,
(select id
from mytable t3
where t3.added_on > t.added_on
order by t3.added_on
limit 1
) as next_id FROM mytable as t ORDER BY `added_on`

它有效,但只给我“上一个”和“下一个”的id字段。您可能知道,在子查询中使用 * (或 'id', 'title')而不是 id 会产生错误。我研究过使用 JOIN 和其他一些方法,但我只是不明白。

最佳答案

好的,我明白了,这是为所有试图找到解决方案的人提供的解决方案。如果对您有帮助,请务必投票。

SELECT t.*, 
prev.id as prev_id,
prev.added_on as prev_added_on,
next.id as next_id,
next.added_on as next_added_on
FROM `TABLE_NAME` AS t
LEFT JOIN `TABLE_NAME` AS prev
ON prev.id =
(select id
from `TABLE_NAME` t2
where t2.added_on < t.added_on
order by t2.added_on DESC
limit 1)
LEFT JOIN `TABLE_NAME` AS next
ON next.id =
(select id
from `TABLE_NAME` t3
where t3.added_on > t.added_on
order by t3.added_on
limit 1 )
ORDER BY t.added_on DESC

最后一个 ORDER BY 实际上导致整个事情由于某种原因而得到极大的优化(我目前对 mysql 的理解并没有让我知道为什么这是肯定的),在我的例子中它使得执行速度至少是没有它的两倍。

关于mysql 在子查询中返回同一表中上一个和下一个的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26662306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com