2014-09-13 50 views
-1

我已声明变量(total,order_num,order_stts,id_cust,reMarks)。但是它说错误的结果是由多行组成。我该如何解决这个错误?请帮我解决这个错误,我是新来的sql。错误1172:结果包含多个行(在SQL中)

从这个代码,有几个任务做:

(1) update tble customer by setting the address to '90 TYT' if c_id= 1 
(2) view order_no,status,c_id,item_total remarks. 
(3) if item_total 0, then update table order_status by setting remarks = 'UNAVAILABLE', 
     else select order_no,status,item_total,remarks where status = 'waiting'. 


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

declare total int default 0; 
declare order_num varchar(45) default 000; 
declare order_stts varchar(45) default 000; 
declare id_cust int default 0; 
declare reMarks varchar (45) default 000; 

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 
into order_num,order_stts,id_cust,total,reMarks 
from customer c, order_status o 
where c.c_id=o.c_id; 

    if (total > 0) then 
    update order_status o 
    set reMarks = 'UNAVAILABLE' 
    where order_num > '123'; 
    else 
    select order_num,order_stts,total,reMarks 
    from order_status 
    where order_stts = 'waiting'; 

end if; 

end 

回答

0

错误归因于第二个SELECT语句中的INTO子句。如果SELECT返回不超过一行,那不会是错误的。

但是,如果该SELECT返回多于一行,MySQL将抛出1172错误。 (您可以通过在该“SELECT ... INTO”语句中添加一个LIMIT 1子句并验证该错误未被抛出来进行测试。

您的过程运行SELECT返回结果集,然后发出UPDATE语句修改一个表中的零个或多个行

你的过程的下一个部分是令人困惑的;目前还不清楚你试图实现什么,SELECT可以返回零,一个或多个行如果意图是执行一个有条件测试是否有任何行item_total > 0,

然后一个可能的“修复”(避免1172错误)将被添加

AND o.item_total > 0 LIMIT 1 

SELECT ... INTO语句,没有ORDER BY,它不确定哪一行将被返回。但它看起来并不重要。除了返回值o.item_total的比较之外,它看起来不像过程对返回的列做任何事情。

只有在找到item_total>0行时,才会执行以下UPDATE语句。

即将更新order_number大于指定常数的所有行。

似乎与前一个SELECT ... INTO语句返回的行没有任何关系。

如果意图是更新order_status(与客户相关)中的行,如果上一个查询返回的“any”行的item_total> 0,则“修复”将完成该操作。

然后过程(有条件地)返回第二个结果集(所有来自order_status且带有`order_stts ='waiting'的行),但前提是没有任何order_status行且item_total> 0。

您可以修复1172错误,但此过程比该错误有更大的问题。整个过程似乎是解决它应该解决的任何问题的奇怪方法。它看起来像是一堆混杂在一起的SQL语句,没有一个明确的设计。

+0

非常感谢你@ spencer7593。你帮了我很多!你的解释是最好的:) – 2014-09-13 06:15:45

0

这意味着

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; 

上面的查询返回,如果你想保存结果在未acceptible多行变量。所以,如果你不希望多行,请检查您的数据,或者如果你是第一个行值确定,在查询添加限制1

select o.order_no,o.o_status,c.c_id,o.item_total,o.remarks 
into order_num,order_stts,id_cust,total,reMarks 
from customer c, order_status o 
where c.c_id=o.c_id limit 1; 

您可以尝试在搜索结果由多行Stackoverflow和你应该得到大量的答案!

+0

实际上,我期待它返回多行。所以,我可以修复这个错误吗? @Akhil – 2014-09-13 05:49:35

+0

发布您的表格结构和预期结果。我希望你没有接近这个问题 – Akhil 2014-09-13 05:55:40

相关问题