mysql 循环创建列_mysql – 查询列中的循环值
我需要?jiǎng)?chuàng)建一個(gè)查詢,一次只將一列的值移動(dòng)一行↑:
+------------+----------------+
| anotherCOL | values_to_loop |
+------------+----------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
+------------+----------------+
所以,下次我運(yùn)行查詢時(shí),它應(yīng)該是這樣的
+------------+----------------+
| anotherCOL | values_to_loop |
+------------+----------------+
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 6 |
| 6 | 7 |
| 7 | 8 |
| 8 | 9 |
| 9 | 10 |
| 10 | 1 |
+------------+----------------+
我需要循環(huán)只有一個(gè)MYSQL COLUMN的值,就像每次運(yùn)行查詢時(shí)將值移動(dòng)一個(gè)ROW UP↑一樣.
注意:提供的表只是說(shuō)明性的,數(shù)據(jù)不同.
最佳答案 以下是在單個(gè)UPDATE查詢中執(zhí)行此操作的方法:
UPDATE tbl a
INNER JOIN (
SELECT values_to_loop
FROM (SELECT * FROM tbl) c
ORDER BY anotherCOL
LIMIT 1
) b ON 1 = 1
SET a.values_to_loop =
IFNULL(
(SELECT values_to_loop
FROM (SELECT * FROM tbl) c
WHERE c.anotherCOL > a.anotherCOL
ORDER BY c.anotherCOL
LIMIT 1),
b.values_to_loop
)
它的工作原理如下:
>更新來(lái)自tbl的所有記錄
>使用臨時(shí)表連接以檢索values_to_loop的最高值(將返回到底部的值)
>將values_to_loop的新值設(shè)置為下一行的相應(yīng)值(c.anotherCOL> a.anotherCOL … LIMIT 1)
筆記:
>即使anotherCOL中存在間隙(例如:1,2,3,6,9,15),這也有效
>需要使用(SELECT * FROM tbl)而不是tbl,因?yàn)槟辉试S使用您在更新查詢中更新的表
在anotherCOL中沒(méi)有間隙時(shí)更快查詢
如果anotherCOL中的值沒(méi)有間隙,您可以使用下面的查詢,如果您在anotherCOL上有索引,該查詢應(yīng)該非常快:
UPDATE tbl a
LEFT JOIN tbl b on b.anotherCOL = a.anotherCOL + 1
LEFT JOIN (
SELECT values_to_loop
FROM tbl
WHERE anotherCOL = (select min(anotherCOL) from tbl)
) c ON 1 = 1
SET a.values_to_loop = ifnull(
b.values_to_loop,
c.values_to_loop
)
總結(jié)
以上是生活随笔為你收集整理的mysql 循环创建列_mysql – 查询列中的循环值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html文档 字符引用,【转】HTML中
- 下一篇: 用什么软件录屏最好?录制高清视频无水印,