【问题标题】:How come this codes error? SQL Error code 1109: Unknown table 'o' in field list这个代码错误怎么来的? SQL错误代码1109:字段列表中的未知表'o'
【发布时间】:2014-09-13 03:26:29
【问题描述】:

当我运行这段代码时,它给了我错误。从这段代码中,有几个任务要做: (1) 如果 c_id= 1,则通过将地址设置为 '90 TYT' 来更新 tble 客户 (2)查看order_no,status,c_id,item_total备注。 (3) 如果item_total为0,则通过设置remarks = 'UNAVAILABLE'来更新表order_status,否则选择order_no,status,item_total,remarks where status = 'waiting'。

请帮我修复错误。我是 SQL 新手。

#drop procedure if exists usp_GetAnything;
delimiter //
create procedure usp_GetAnything()
begin

select c_id,lname,address,city
from customer;
update customer
set address = '90 TYT'
where c_id = 1;

select o.order_no,o.o_status,c.c_id,o.item_total,o.remarks
from customer c, order_status o
where c.c_id=o.c_id;

    if (o.item_total > 0) then 
    update order_status o
    set remarks = 'UNAVAILABLE'
    where order_no > '123';
    else  
    select order_no,o_status,item_total,remarks
    from order_status
    where o_status = 'waiting';

end if;

end

【问题讨论】:

  • 它是什么 dbms? MySQL?
  • 是的。我正在使用mysql。代码给出了输出。但它说,代码有错误 1109

标签: mysql sql


【解决方案1】:

上线失败:

 if (o.item_total > 0)

o 在之前的 select 子句(包括所有选定的变量)之外无法识别。

为了使用从先前选择返回的结果,您应该select ... INTO... (选择结果参数到声明的局部变量中)。

您可以找到here以下示例:

DELIMITER //
CREATE PROCEDURE `proc_WHILE` (IN param1 INT)
BEGIN
    DECLARE variable1, variable2 INT;
    SET variable1 = 0;

    WHILE variable1 < param1 DO
        INSERT INTO table1 VALUES (param1);
        SELECT COUNT(*) INTO variable2 FROM table1; 
        SET variable1 = variable1 + 1;
    END WHILE;
END //

您可以看到variable1variable2 在过程开始时声明,然后与select ... INTO ... 一起使用。

【讨论】:

  • 那么,应该如何?
  • @F.A 我向你展示了如何 - 但我不会为你写它。现在您知道出了什么问题 - 修复它并重试,如果您遇到更多问题,您可以将它们发布在单独的问题上。
猜你喜欢
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2015-08-19
  • 1970-01-01
  • 2021-08-11
相关资源
最近更新 更多