0

私は別の投稿でこの質問をしましたが、基本的なクエリがありますが、次の実行時にまだ機能しません。アイデアは何も起こりませんか?

UPDATE mage_catalog_product_entity_varchar 
  SET value = (SELECT value WHERE attribute_id = 703) 
  WHERE attribute_id = 106;

したがって、attribute_id列= 106の場合は値列の値を更新しますが、attribute_id列=703の値列からのみ更新します。

次のクエリでも、attribute_id106に対応する値フィールドの0が更新されます。

UPDATE mage_catalog_product_entity_varchar 
  SET value = (SELECT value from mage_catalog_product_entity_varchar 
  WHERE attribute_id = 703) WHERE attribute_id = 106;
4

2 に答える 2

1

サブクエリに From 句がありません。一度見直してみませんか

UPDATE mage_catalog_product_entity_varchar 
  SET value = (SELECT value WHERE attribute_id = 703) 
  WHERE attribute_id = 106;

そうあるべきです(内部クエリで直接使用されている場合、MYSQLはテーブルを更新しません)

UPDATE mage_catalog_product_entity_varchar a, 
   mage_catalog_product_entity_varchar b
    SET a.value = b.value WHERE a.attribute_id = 106
     AND b.attribute_id = 703;

SQL Fiddle 1でも解決策を見つけることができます

MySQLで「 FROM 句で更新するターゲット テーブル 'table_name' を指定できません」というエラーが表示される このエラーの詳細については、トピックを参照してください。

MySQL #1093 - FROM 句で更新するターゲット テーブル 'giveaways' を指定できない

説明した表に、属性 ID 703 に対応する複数のエントリがある場合、クエリは挿入された最初のレコードから値を取得し、他のレコードは無視されます。

この状態は、SQL Fiddle 2で確認できます。

于 2012-10-26T15:48:07.433 に答える
0

次のようなサブ選択なしで相関更新として実行することもできます

UPDATE mage_catalog_product_entity_varchar, 
       mage_catalog_product_entity_varchar WantFromHere
   SET value = WantFromHere.value
   WHERE attribute_id = 106
     AND WantFromHere.attribute_id = 703;

ただし、「その他」のテーブルは特定の属性用であるため、実際には「JOIN」ではないため、必要な特定の属性 ID (つまり、703) を適用した where 句を使用します。関係するレコードの数はわかりませんが、すべてのレコードの「サブクエリ」が処理されるのを防ぎます。

于 2012-10-26T16:14:57.667 に答える