2011-08-08 16 views
0

ウェブホスティング会社が週末に私のPHP Myadminバージョンを変更しました.Mysqlの在庫を更新するために1年間使った更新コードは機能しなくなりました。SQLの更新構文

ORIGコード

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を追加)
  • 1行を返すだけにTOP句を使用してサブクエリがより具体的な確認 - SELECT TOP 1....