0

現在、誤って入力されたデータがいくつかあり、基本的に現在のレコードを更新して新しいレコードを挿入するスキーマを実行する必要があります (可能であれば 1 つのステートメントで)。テーブルは次のように設定されています。

  cityID            int(10)
  stateID           smallint(5)
  orderEnterpriseID int(10)
  isDefault         tinyint(3)
  locationType      tinying(2)

現在、すべてのレコードの locationType は 0 であり、5 に更新する必要があります。

更新
tableセット
tablelocationType = 5 どこ tableで . locationType = 0 かつ table. orderFromEnterprise = 0;

しかし、重複データを含む別のレコードを作成し、locationType を 6 に設定する必要もあります。これらの SQL ステートメントのいくつかに頭を悩ませているので、どんな助けも大歓迎です!!!!

4

3 に答える 3

1

最初に、すでに説明したように更新を実行します。

UPDATE
table SET
table.locationType = 5 WHERE table.locationType = 0 AND table.orderFromEnterprise = 0;

次に、すべてのレコードをコピーし、挿入時に位置タイプとして 6 を割り当てます。新しく追加されたレコードもコピーされないように、locationType = 5 でレコードを制限することを忘れないでください (それが mysql の問題であるかどうかはわかりませんが、念のため):

INSERT INTO table 
(cityID, stateID, orderEnterpriseID, isDefault, locationType) 
SELECT t1.cityID, t1.stateID, t1.orderEnterpriseID, t1.isDefault, 6 
FROM table as t1
WHERE t1.locationType = 5

1 つのステートメントではありませんが、仕事は完了します。矛盾が心配な場合は、トランザクションを 2 つの操作にラップするだけです。

于 2011-03-31T19:16:30.693 に答える
1

UPDATE ステートメント内でそれを行うことはできません。更新は、テーブルに既にあるもののみを更新します。

1 つのフィールドを変更してエントリを複製する場合は、次のようにします。

INSERT table_name (cityID, stateID , orderEnterpriseID, isDefault, locationType)
SELECT cityID, stateID , orderEnterpriseID, isDefault, 6
FROM table_name

(これらすべてが 1 つのステートメントとして実行されることに注意してください) また、テーブルから locationType の代わりに6を選択していることにも注意してください。

ここで行うことは、場所の種類を 6 に置き換えてテーブルからすべてを選択し、これをテーブルに挿入するだけです。

于 2011-03-31T19:17:25.930 に答える
1

単一のクエリでこれを行うことは不可能だと思います。ただし、locationType を 6 に設定して重複行を挿入し、locationTypes を 0 から 5 に更新することはできます。クエリは次のとおりです。

insert into table (cityID, stateID, orderEnterpriseID, isDefault, locationType)
select cityID, stateID, orderEnterpriseID, isDefault, 6
from table
where locationType = 0 and orderEnterpriseID = 0;

# now your update query
update table
set locationType = 5
where locationType = 0 and orderEnterpriseID = 0;
于 2011-03-31T19:18:14.873 に答える