それで、
問題
私の質問は、MySQL のテーブルをそれ自体と逆の順序で結合する方法についてです。私が持っているとします:
ID名 1 ファースト 2秒 5 サード 6 フォース 7 フィフス 8 シックス 9 セブンス 13 エイト 14 ナイン 15 10分の1
-次に、結合されたレコードを逆順で返すクエリを作成したいと思います。
left_id 名 right_id 名 1 ファースト 15 10 分の 1 2 秒 14 9 5 サード 13 エイト 6 4 番目 9 7 番目 7 5 番目 8 6 番目 8 6 番目 7 5 番目 9 7 番目 6 4 番目 13 エイト 5 サード 14 ナイン 2 秒 15 10位 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 レコード) ため、パフォーマンスは気にする必要はないと思います。
質問
クエリを何らかの形で単純化できますか? また、変数を使用しないことも重要です。(私のフィドルのように)結果に注文を含めることができますが、それは必須ではありません。