2011-08-08 89 views
0

網絡託管公司在週末更改了我的Php Myadmin版本,並且我在一年中更新了用於更新Mysql庫存的代碼不再有效。SQL更新語法

原稿代碼

update uc_product_stock x set x.stock = (select y.stock from import y where trim(x.SKU) = trim(y.SKU)) 

現在帶回以下錯誤

#1242 - Subquery returns more than 1 row 

在此先感謝有這方面的幫助。

+3

你確定它不應該返回多行?當你自己運行子查詢時你會得到什麼。 –

回答

2
UPDATE x 
    SET x.stock = y.stock 
    FROM uc_product_stock x 
     INNER JOIN import y 
      ON TRIM(x.SKU) = TRIM(y.SKU)) 
+1

這是否仍然會導致Y中每個X行有多個值? – JNK

+0

@JNK - 這應該會運行,但它會將x.stock更新爲任何y.stock – Lamak

+0

+1 - 這仍然是一種解決方法。可能應該讓他知道他將在更新的領域有不確定的價值。 – JNK

2

您的子查詢返回多個值,並且SQL不知道要將哪一個值分配給您的行。

您必須獲取返回單個值的子查詢。

選項包括:

  • 讓子查詢更具體的(增加額外WHERE過濾器,JOIN等)
  • 使用TOP子句僅返回一行 - SELECT TOP 1....