所以,
问题
我的问题是关于 - 如何以相反的顺序将 MySQL 中的表与自身连接起来?假设我有:
身份证名称 1 第一 2 秒 5 第三 6 第四 7 第五 8 第六 9 第七 13 八 14 九 15 第十
- 现在我想创建一个查询,它将以相反的顺序返回连接的记录:
left_id 名称 right_id 名称 1 前 15 第十 2 秒 14 九 5 第三 13 八 6 第四 9 第七 7 第五 8 第六 8 第六 7 第五 9 第七 6 第四 13 八 5 第三 14 九 2 秒 15 第十 1 第一
我的方法
我现在有这个查询:
SELECT
l.id AS left_id,
l.name,
(SELECT COUNT(1) FROM sequences WHERE id<=left_id) AS left_order,
r.id AS right_id,
r.name,
(SELECT COUNT(1) FROM sequences WHERE id<=right_id) AS right_order
FROM
sequences AS l
LEFT JOIN
sequences AS r ON 1
HAVING
left_order+right_order=(1+(SELECT COUNT(1) FROM sequences));
- 有关示例结构和代码,请参阅此小提琴。
一些背景
没有用例。我以前在应用程序中这样做过。现在主要是好奇是否有办法在 SQL 中做到这一点——这就是为什么我不仅在寻找“任何解决方案”(比如我的)——而是尽可能简单的解决方案。源表总是很小(<10.000 条记录)——所以我认为性能不是要关心的事情。
问题
我的查询可以以某种方式简化吗?此外,重要的是不要使用变量。订单可以包含在结果中(就像我的小提琴一样)——但这不是强制性的。