mysql - 在查询窗口中运行的存储过程中的查询出现未知列错误 (1054)

标签 mysql mysql-workbench

我在 MySQL 中遇到了一个奇怪的问题。我编写了一个查询,将跨国数据聚合成每小时的 block 。该查询在工作台查询窗口中效果很好。然后,我将查询实现为存储过程,并收到“错误代码:1054。‘字段列表’中未知列‘d.SiteId’”消息。

SELECT  `d`.`SiteId`, `d`.`TransactionDate`, (`d`.`TimeGrouping` * 10000) as 'HourEndTime', Sum(`d`.`SalesAmount`) as 'TotalSales', count(`d`.`PosTransactionId`) as 'TransactionCount', Sum(`d`.`ItemCount`) as 'ItemCount', `d`.`Currency`
FROM    (SELECT DISTINCT `SiteId`, `TransactionDate`, `TimeGrouping`, `SalesAmount`, `PosTransactionId`, `ItemCount`, `Currency`
        FROM PosSalesDev.Transaction
        WHERE `SiteId` = 31
        AND `TransactionDate` = '2018-06-08') AS `d`
        GROUP BY TransactionDate, TimeGrouping
ORDER BY HourEndTime;

存储过程中的查询:

CREATE DEFINER=`user`@`%` PROCEDURE `TransactionGet`(siteId varchar(10),
                                    transactionDate Date)
BEGIN

# Query will remove duplicate records from the aggregated data
SELECT  `d`.`SiteId`, `d`.`TransactionDate`, (`d`.`TimeGrouping` * 10000) as 'HourEndTime', Sum(`d`.`SalesAmount`) as 'TotalSales', count(`d`.`PosTransactionId`) as 'TransactionCount', Sum(`d`.`ItemCount`) as 'ItemCount', `d`.`Currency`
FROM    (SELECT DISTINCT `SiteId`, `TransactionDate`, `TimeGrouping`, `SalesAmount`, `PosTransactionId`, `ItemCount`, `Currency`
        FROM PosSalesDev.Transaction
        WHERE `SiteId` = siteId
        AND `TransactionDate` = transactionDate) AS `d`
GROUP BY TransactionDate, TimeGrouping;

END

任何帮助将不胜感激。

谢谢 乔迪。

最佳答案

避免将参数命名为列名称。请参阅13.6.4.2 Local Variable Scope and Resolution .

尝试:

DELIMITER //

CREATE DEFINER=`user`@`%` PROCEDURE `TransactionGet`(
  _siteId varchar(10),
  _transactionDate Date
)
BEGIN

# Query will remove duplicate records from the aggregated data
SELECT
  `d`.`SiteId`,
  `d`.`TransactionDate`,
  (`d`.`TimeGrouping` * 10000) as 'HourEndTime',
  Sum(`d`.`SalesAmount`) as 'TotalSales',
  count(`d`.`PosTransactionId`) as 'TransactionCount',
  Sum(`d`.`ItemCount`) as 'ItemCount',
  `d`.`Currency`
FROM
  (SELECT
     DISTINCT `SiteId`,
     `TransactionDate`,
     `TimeGrouping`,
     `SalesAmount`,
     `PosTransactionId`,
     `ItemCount`,
     `Currency`
   FROM
     PosSalesDev.Transaction
   WHERE
     `SiteId` = _siteId AND
     `TransactionDate` = _transactionDate
) AS `d`
GROUP BY
  `d`.`TransactionDate`,
  `d`.`TimeGrouping`;
END//

DELIMITER ;

关于mysql - 在查询窗口中运行的存储过程中的查询出现未知列错误 (1054),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845138/

相关文章:

MySQL 将特定行放在结果的顶部

MySQL/MariaDB 在 1 分 42 秒后关闭

mysql - 使用 CASE WHEN 在过程外部执行 INSERT

mysql - 是否应该为数据库表中没有唯一键的每一行生成一个唯一 ID?

php - 使用 PHP 返回从 MySQL 拉取的数组

mysql - 使用外键和 Django 更新 MySQL 数据库

mysql - 在workbench中升级mysql版本

mysql - 计算日期范围之间的值

mysql - 如何使用虚拟数据创建数据库设计

mysql - 从 SQL 查询问题下载 CSV