【问题标题】:Issue with select subquery in Mysql8.0Mysql8.0中选择子查询的问题
【发布时间】:2019-04-02 13:15:25
【问题描述】:

为什么在mysql中出现无效的sql语句。它在 oracle 中完美运行。

SELECT originalAmount,fees,id FROM 
(SELECT originalAmount,fees,id, ROW_NUMBER() OVER (PARTITION BY transaction_number ORDER BY eventdate ASC) RANK FROM kir_records where customerid= 1704) 
WHERE RANK = 1;

将其粘贴到 mysql 工作台后,我立即收到语法错误。

错误: Select is invalid at this position. Expecting '(' 第一次选择。

是否有解决方法来完成这项工作?

【问题讨论】:

    标签: mysql-8.0


    【解决方案1】:

    尝试使用此查询。

    SELECT originalAmount,fees,id FROM 
    ((SELECT originalAmount,fees,id, ROW_NUMBER() OVER (PARTITION BY transaction_number ORDER BY eventdate ASC) RANK FROM kir_records where customerid= 1704)) 
    WHERE RANK = 1;
    

    【讨论】:

      【解决方案2】:

      看起来 RANK 是 MySql 中的保留字。在 RANK 周围使用反引号 (``),它按预期工作。要注意的另一件事是每个派生表(AKA 子查询)确实必须有一个别名。 Dervied Table alias

      这是对我有用的查询:

      SELECT originalAmount,fees,id FROM 
      (SELECT originalAmount,fees,id, ROW_NUMBER() OVER (PARTITION BY transaction_number ORDER BY eventdate ASC) `RANK` FROM kir_records where customerid= 1704) AS SomeAlias
      WHERE `RANK` = 1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        相关资源
        最近更新 更多