【问题标题】:what is the alternative for ROWNUM in MySQL in query? [duplicate]MySQL 在查询中 ROWNUM 的替代方法是什么? [复制]
【发布时间】:2020-07-18 12:00:21
【问题描述】:

您好,当我在 oracle 中执行以下查询时,它工作正常,但在 MySQL 中显示 ROWNUM 错误。

SELECT ROWNUM , key_value , new_rec 
FROM table1 
WHERE NOT EXISTS ( SELECT key_value 
                   FROM table2 
                   WHERE table1.key_value = table2.key_value 
                 );

在 MySQL 中有什么替代方法。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    首先:如果没有ORDER BY,则不确定哪一行会得到哪一个ROWNUM

    现在,假设您确实有一个排序列(例如 id),这取决于您正在运行的 MySQL 版本。

    在 MySQL 8.0 中,只需使用 row_number():

    SELECT row_number() over(order by id) rn, key_value, new_rec 
    FROM table1 
    WHERE NOT EXISTS ( SELECT key_value FROM table2 WHERE table1.key_value = table2.key_value );
    

    在早期版本中,您将使用用户变量。

    SET @rn := 0;
    SELECT @rn := @rn + 1 rn, t.*
    FROM (
        SELECT key_value , new_rec 
        FROM table1 
        WHERE NOT EXISTS ( SELECT key_value FROM table2 WHERE table1.key_value = table2.key_value )
        ORDER BY id
    ) t
    

    【讨论】:

      【解决方案2】:

      ROWNUM 表示序列值,您可以使用row_number() 创建唯一序列:

      SELECT ROW_NUMBER() OVER (ORDER BY ?) AS ROWNUM , key_value , new_rec 
      FROM table1 
      WHERE NOT EXISTS ( SELECT key_value 
                         FROM table2 
                         WHERE table1.key_value = table2.key_value 
                       );
      

      注意:使用标识列而不是 ?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        相关资源
        最近更新 更多