MySQL:在select语句中自动增加临时列

Sg1*_*456 38 mysql temporary auto-increment

如何使用MySQL在select语句中创建和自动增加临时列?

这是我到目前为止:

SET @cnt = 0;
SELECT
    (@cnt =@cnt + 1) AS rowNumber,
    rowID
FROM myTable
WHERE CategoryID = 1
Run Code Online (Sandbox Code Playgroud)

哪个回报:

+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+  (NULL)   |   1   +
+  (NULL)   |   25  +
+  (NULL)   |   33  +
+  (NULL)   |   150 +
+  (NULL)   |   219 +
+++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)

但是我需要:

+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+  1        |   1   +
+  2        |   25  +
+  3        |   33  +
+  4        |   150 +
+  ...      |   ... +
+++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)

Ker*_*mit 80

这将为您提供连续的行号3.

SELECT
    (@cnt := @cnt + 1) AS rowNumber,
    t.rowID
FROM myTable AS t
  CROSS JOIN (SELECT @cnt := 0) AS dummy
WHERE t.CategoryID = 1
ORDER BY t.rowID ;
Run Code Online (Sandbox Code Playgroud)

结果

| ROWNUMBER | ROWID |
---------------------
|         1 |     1 |
|         2 |    25 |
|         3 |    33 |
|         4 |   150 |


Nie*_*els 22

试试这个:

SET @rownr=0;
SELECT @rownr:=@rownr+1 AS rowNumber, rowID
  FROM myTable
  WHERE CategoryID = 1
Run Code Online (Sandbox Code Playgroud)

在现代版本的MySQL中,您可以使用MySQL窗口:http://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function/

例:

SELECT  ROW_NUMBER() OVER (  ORDER BY productName  ) row_num, 
        productName, msrp 
FROM   products ORDER BY   productName;
Run Code Online (Sandbox Code Playgroud)


小智 19

但是如果你group by在select语句中有一个怎么办?计算将关闭.

对于这种情况,我找到的唯一解决方案是嵌套选择:

SELECT (@cnt := @cnt + 1) AS rowNumber, t.*
from
(select
    t.rowID
FROM myTable 
WHERE CategoryID = 1
ORDER BY rowID) t
CROSS JOIN (SELECT @cnt := 0) AS dummy
Run Code Online (Sandbox Code Playgroud)

  • 你是传奇!我搜索了整个SO的具体案例,但直到我遇到这个答案才找到解决方案! (3认同)