2014-09-13 45 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

相關問題