MySQL 'order clause' 中的未知列

标签 mysql stored-procedures

我的 MySQL 数据库中有一个过程。

我的程序运行良好。但目前我必须在 IF (opt=1) 条件内设置 order by tblUserKeyStatus.createdDate ,当我设置 order by 时,它给出以下错误

Error Code: 1054. Unknown column 'tblUserKeyStatus.createdDate' in 'order clause

下面给出了我的存储过程

CREATE PROCEDURE proc_GetStatus(IN _userId varchar(64) , IN _qtr int, IN opt int)
BEGIN
    IF (opt = 1) then
        SELECT tblKeyStatus.*,'pending' AS `Status`,'' as scheduleDate,
        ' ' as doneDate,' ' as result FROM tblUserKeyStatus,tblKeyStatus WHERE tblKeyStatus.trimId not in
        (SELECT trimId from tblUserKeyStatus WHERE userId=_userId)
        union
        SELECT tblKeyStatus.*,tblUserKeyStatus.`Status` AS `Status`,tblUserKeyStatus.scheduleDate,
        tblUserKeyStatus.doneDate,tblUserKeyStatus.result FROM tblKeyStatus,tblUserKeyStatus WHERE 
        tblUserKeyStatus.trimId=tblKeyStatus.trimId and tblUserKeyStatus.userId=_userId
        order by tblUserKeyStatus.createdDate;
    Else
        SELECT * from tblKeyStatus WHERE qtr=_qtr;
    End if;
END

最佳答案

ORDER BY 应用于 UNION 操作中指定的整个查询,以便 UNION 返回的整个结果集是有序的。

尝试在两个子查询中选择createdDate字段,以便ORDER BY可以访问它:

SELECT tblUserKeyStatus.createdDate,
       tblKeyStatus.*,'pending' AS `Status`,
       '' as scheduleDate,
       ' ' as doneDate,
       ' ' as result 
FROM tblUserKeyStatus, tblKeyStatus 
WHERE tblKeyStatus.trimId not in (SELECT trimId 
                                  from tblUserKeyStatus 
                                  WHERE userId=_userId)
UNION

SELECT tblUserKeyStatus.createdDate,
       tblKeyStatus.*,
       tblUserKeyStatus.`Status` AS `Status`,
       tblUserKeyStatus.scheduleDate,
       tblUserKeyStatus.doneDate,tblUserKeyStatus.result 
FROM tblKeyStatus,tblUserKeyStatus 
WHERE tblUserKeyStatus.trimId=tblKeyStatus.trimId and 
      tblUserKeyStatus.userId=_userId
ORDER BY createdDate;

您还必须删除 tblUserKeyStatus 名称前缀。

关于MySQL 'order clause' 中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43389646/

相关文章:

mysql GIS(多边形内的点和点附近)

oracle - 优化Oracle 11g程序

php - 如何用php获取mysql数据库的行数

mysql - 在 Rails 中使用存储过程

sql - 在存储过程中使用 WITH,postgres

sql - 在存储过程中使用 View 而不是表?

mysql - 在 MySQL/MariaDB 中创建过程并定义变量会导致错误 #1064

MYSQL 初学者 ORDER By - 只需要列中每个条目的最大值

mysql - 使用 CONCAT 生成的字符串在存储过程中使用 CONCAT_WS() 将两列合并为一列

MySQL JOIN 独立于 WHERE 子句