2017-07-19 212 views
-1

我需要在此表中設置「dph」「Strobjednavka」,但我不知道什麼是錯誤的。請幫忙 :)。SQL子查詢返回多於一行

這裏是我的SQL腳本:

UPDATE STRObjednavka as o SET dph = (
SELECT dph FROM STRCena WHERE 
    menuKodCode = 
    (SELECT menuKodCode FROM STRMenu WHERE 
     id = o.menuId 
     ) 
    AND 
    skupinaId = 
    (SELECT stravGroupId FROM grups1 WHERE 
     PKey = 
     (SELECT SGroup FROM users1 WHERE 
      PKey = o.userId 
     ))) 
    WHERE o.price > 0 AND `date` > '2015-01-28 13:52:36' AND dph = 0; 

SQL說:SQL錯誤1242:子查詢返回多個1行

+2

使用連接而不是子查詢 – Jens

+0

這不是重複的https://stackoverflow.com/questions/28171474/solution-to-subquery-returns-more-than-1-row-error,因爲這裏的標量子查詢a被使用。 – dnoeth

+0

再次檢查您的子查詢。如果不能刪除重複項(壞道),只需在子查詢末尾添加LIMIT 1即可。或者將相同的條件變爲「IN」。 – Vitaly

回答

0

你可以能夠與下面的腳本來更新,但是你需要檢查更新是否正確,如果您提供了一些示例數據,那麼它將很容易跟蹤問題。

UPDATE STRObjednavka as o SET dph = (
SELECT max(dph) FROM STRCena WHERE 
    menuKodCode = 
    (SELECT max(menuKodCode) FROM STRMenu WHERE 
     id = o.menuId 
     ) 
    AND 
    skupinaId = 
    (SELECT max(stravGroupId) FROM grups1 WHERE 
     PKey = 
     (SELECT max(SGroup) FROM users1 WHERE 
      PKey = o.userId 
     ))) 
    WHERE o.price > 0 AND `date` > '2015-01-28 13:52:36' AND dph = 0; 
+0

它的工作原理非常感謝你<3 :) –

0

不幸的是,MySQL不允許你爲LIMIT子查詢。根據您的使用情況,您可以將MINMAX添加到子查詢中。這是MIN S IN的所有子查詢:

UPDATE STRObjednavka as o SET dph = (
SELECT MIN(dph) FROM STRCena WHERE 
    menuKodCode = 
    (SELECT MIN(menuKodCode) FROM STRMenu WHERE 
     id = o.menuId 
     ) 
    AND 
    skupinaId = 
    (SELECT MIN(stravGroupId) FROM grups1 WHERE 
     PKey = 
     (SELECT MIN(SGroup) FROM users1 WHERE 
      PKey = o.userId 
     ))) 
    WHERE o.price > 0 AND `date` > '2015-01-28 13:52:36' AND dph = 0; 

儘管你真的只需要其器添加到返回多行的子查詢。

+0

認爲是這樣的話題在其他相同的答案,非常感謝你:) –

0

你的第一個問題是你寫'.... =(SELECT ....)'。由於您使用的是相等運算符,因此您要求SQL將整列值分配給單個單元。在子查詢之前將您的相等運算符更改爲IN運算符。

+0

我試過了但沒有工作 –

0

您可能應該使用不同的查詢模式。

在你的查詢中有幾種地方有這種事情。

WHERE menuKodCode =    /* !! might generate error 1242 */ 
    (SELECT menuKodCode FROM STRMenu WHERE id = o.menuId) 

有沒有保證您的內部查詢將不會返回多行,並且當它,MySQL的拋出錯誤1242

SQL工作wiith值的集合。如果您使用的是IN而不是=,則您的查詢將起作用。

WHERE ... menuKodCode IN 
    (SELECT menuKodCode FROM STRMenu WHERE id = o.menuId) 

但是你應該弄清楚,邏輯是否正確。如果我是你,我會在做更新之前做大量的SELECT操作來測試它。

+0

是啊我嘗試了IN而不是=但沒有工作 –