久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

MYSQL - 警告:#1287 在表達式中設置用戶變量已被棄

MYSQL - Warning: #1287 Setting user variables within expressions is deprecated and will be removed in a future release(MYSQL - 警告:#1287 在表達式中設置用戶變量已被棄用,并將在未來版本中刪除) - IT屋-程序員軟件
本文介紹了MYSQL - 警告:#1287 在表達式中設置用戶變量已被棄用,并將在未來版本中刪除的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

警告:#1287 在表達式中設置用戶變量已被棄用,并將在未來版本中刪除.考慮替代方案:SET variable=expression, ..."或SELECT expression(s) INTO variables(s)".

Warning: #1287 Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'.

這是 MySQL 8.0.21 吐出來的.代碼有效......但我也需要它在未來版本中工作......所以我的問題是這個警告的正確方法是什么?

This is what MySQL 8.0.21 spits out. The code works... But I need it to work in future versions too.... So my question is what is the correct approach to this warning?

我需要將一個變量設置為某個數字(我將通過一行的 ID 獲得).而且我需要它在每個 SET 語句中加 1.

I need a variable to be set to some number (which I will get via ID of a row). And I need it to be incremented by 1 with every SET statement.

我應該如何更改此代碼以使警告消失?

How should I change this code so the warning would go away?

SET @fromorder = (SELECT `order` FROM forms WHERE id=5);
/* SET @fromorder = 4;  - so this is the same in the example below */
UPDATE forms SET `order` = @fromorder := @fromorder + 1 WHERE `order` > -1 and `order` <= 4 ORDER BY `order` ASC;
SET @fromorder = null;

據我所知,問題在于:

`order` = @fromorder := @fromorder + 1

我猜這需要改變嗎?

因此:

+-------+-----------+
|   id  |   order   |
+-------+-----------+
|   1   |   0       |
|   2   |   1       |
|   3   |   2       |
|   4   |   3       |
|   5   |   4       |
+-------+-----------+

我想通過這個查詢得到這個(例如):

I want to get this (for example) with this query:

+-------+-----------+
|   id  |   order   |
+-------+-----------+
|   1   |   5       |
|   2   |   6       |
|   3   |   7       |
|   4   |   8       |
|   5   |   9       |
+-------+-----------+

這是一個簡單的 for 循環,增量 += 1;

It is an easy for loop with incrementation += 1;

推薦答案

你的 MySql 版本支持窗口函數,通過使用 ROW_NUMBER() 窗口函數你可以避免變量:

Your version of MySql supports window functions and by using ROW_NUMBER() window function you can avoid variables:

UPDATE forms f
CROSS JOIN (SELECT `order` FROM forms WHERE id = 5) c
INNER JOIN (
  SELECT *, ROW_NUMBER() OVER (ORDER BY `order`) rn
  FROM forms
  WHERE `order` > -1 and `order` <= 4 
) t ON t.id = f.id
SET f.`order` = c.`order` + t.rn;

請參閱演示.

這篇關于MYSQL - 警告:#1287 在表達式中設置用戶變量已被棄用,并將在未來版本中刪除的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Typeorm Does not return all data(Typeorm 不返回所有數據)
MySQL return extra records when using a long type number to filter varchar type(MySQL在使用長類型數字過濾varchar類型時返回額外記錄)
MySQL Error #1071 - Specified key was too long; max key length is 767 bytes(MySQL 錯誤 #1071 - 指定的鍵太長;最大密鑰長度為 767 字節)
MySQL command-line table column width with utf8(MySQL命令行表列寬與utf8)
Python unicode encoding issue(Python unicode 編碼問題)
Create a MySQL stored function with a dynamic number of arguments(創建一個帶有動態參數數量的 MySQL 存儲函數)
主站蜘蛛池模板: 一区二区三区在线观看视频 | 久久久精品一区 | 欧美精品成人 | 欧美久久一区二区 | 91久久精品一区二区二区 | 欧美成人一区二区三区 | 国产91在线播放 | 国产福利在线播放 | 欧美在线a | 欧美888 | 午夜天堂精品久久久久 | 日韩在线视频播放 | 中文字幕97 | 久久精品免费一区二区三 | 成人在线免费电影 | 精品欧美色视频网站在线观看 | 99这里只有精品 | 免费啪啪| 欧美黑人一区 | 久久国产一区二区三区 | 午夜精品久久久久久久99黑人 | 国产成人精品免费 | 日韩国产一区二区三区 | 成人视屏在线观看 | 亚洲午夜视频在线观看 | 国产精品一区二区三区在线 | 日韩高清成人 | 日韩中文不卡 | 日韩欧美在线视频观看 | 亚洲一区欧美 | 亚州精品天堂中文字幕 | 久草网在线视频 | 免费午夜电影 | 成人福利在线 | 国产精品av久久久久久久久久 | 欧美日韩美女 | 人操人人 | 911影院 | 欧美日韩一区二区在线播放 | 亚洲精品www久久久久久广东 | 久久久成人一区二区免费影院 |