2

我正在创建一个程序,我应该在其中查找考试的最后日期。
所以我为此创建了一个局部变量,因为我在其他事情上也需要这个日期。但是,当我对此局部变量执行简单的 SELECT 操作时,会收到以下消息:

“字段列表”中的未知列“last_exam”。

代码:

DECLARE latest_exam date;

  SELECT DATE(MAX(ex_date))
    INTO latest_exam
    FROM vets
   WHERE an_id = p_animal_id
GROUP BY an_id;

SELECT latest_exam, and a bunch of other stuff. ;

在选择中,是否需要包含 FROM 子句?我不这么认为,因为我认为 latest_exam 在程序内。

4

3 回答 3

1

您没有在变量中分配选择的结果。

做这个

select latest_exam = date(max(ex_date))..
于 2012-09-11T03:52:30.253 回答
1

我认为CROSS JOIN可以回答您的问题,因为它会从两个表中生成笛卡尔积。尝试这个。

SELECT x.maxDate,
       b.*
FROM tableName b,
    (
        SELECT DATE (max(ex_date)) maxDate
        FROM vets
        WHERE an_id = p_animal_id
        GROUP BY an_id
    ) x
于 2012-09-11T03:53:41.637 回答
0

我有同样的问题; 结果不是我在过程中的 SELECT INTO 查询(是的,在 MySQL 中有效),而是稍后在该外部过程中对另一个具有该实际错误的过程进行的调用。

我只是在使用模拟值在程序之外确认我的查询后才发现这一点:

SET @this_RID=0, @this_RANo=0, @this_modpos=0;

SELECT Response_ID, Response_attempt_No, position, UNCOMPRESS(RAMX.`data`)
INTO @this_RID, @this_RANo, @this_modpos, @this_XML 
FROM RAMX
WHERE 
    Response_ID>=@this_RID AND Response_attempt_No>=@this_RANo AND position>=@this_modpos 
    AND (NOT (Response_ID=@this_RID AND Response_attempt_No=@this_RANo AND position=@this_modpos))
    AND module_ID=2
    AND `data` <> ""    
ORDER BY Response_ID, Response_attempt_No, position
LIMIT 1;

SELECT @this_RID, @this_RANo, @this_modpos;

+-----------+------------+--------------+
| @this_RID | @this_RANo | @this_modpos |
+-----------+------------+--------------+
|    451994 |          0 |            1 |
+-----------+------------+--------------+
1 row in set (0.00 sec)

在更正它调用的过程之前,调用外部过程会给出此错误:

错误 1054 (42S22):“字段列表”中的未知列“数据”

于 2013-10-01T00:36:05.943 回答