所以,
问题
我的问题是 - 如何以相反的顺序连接 MySQL 中的表?假设我有:
id name 1 First 2 Second 5 Third 6 Fourth 7 Fifth 8 Sixth 9 Seventh 13 Eight 14 Nine 15 Tenth
-and now I want to create a query, which will return joined records in reverse order:
left_id name right_id name 1 First 15 Tenth 2 Second 14 Nine 5 Third 13 Eight 6 Fourth 9 Seventh 7 Fifth 8 Sixth 8 Sixth 7 Fifth 9 Seventh 6 Fourth 13 Eight 5 Third 14 Nine 2 Second 15 Tenth 1 First
My approach
I have now this query:
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));
-看这个fiddle示例结构和代码。
一些背景
没有用例。我以前在应用程序中这样做过。现在主要是好奇是否有一种方法可以在 SQL 中做到这一点——这就是为什么我不仅寻求“任何解决方案”(比如我的)——而且寻求尽可能简单的解决方案。源表总是很小(<10.000 条记录)——所以我认为性能不是问题。
问题
能否以某种方式简化我的查询?另外,不要使用变量也很重要。订单可以包含在结果中(就像我的 fiddle 一样)——但这不是强制性的。
最佳答案
我认为唯一需要改进的是
SELECT
l.id AS left_id,
l.name ln,
(SELECT COUNT(1) FROM sequences WHERE id<=left_id) AS left_order,
r.id AS right_id,
r.name rn,
(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;
有 2 处更改应该会加快速度:
1) 首先逆序计算正确的顺序
2) 避免在最后一行使用 SELECT COUNT
。
编辑:我给 ln,rn 起了别名,因为我看不到 fiddle 中的列
关于mysql - MySQL中的反向连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19114308/