MySQL ОБНОВЛЕНИЕ И ВСТАВКА Заявление - PullRequest
0 голосов
/ 31 марта 2011

В настоящее время есть некоторые данные, которые были введены неправильно, и мне в основном нужно запустить схему, которая обновляет текущую запись и вставляет новую (в одном выражении, если это возможно).Таблица настроена так:

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

Прямо сейчас каждая запись имеет locationType, равный 0, и мне нужно обновить ее до 5:

UPDATE
table SET
table. locationType = 5 ГДЕ table. locationType = 0 И table. orderFromEnterprise = 0;

Но мне тоже нужносоздайте еще одну запись с дублирующимися данными и установите для locationType значение 6. У меня есть проблемы, связанные с некоторыми из этих операторов SQL, и любая помощь очень ценится !!!!

Ответы [ 3 ]

1 голос
/ 31 марта 2011

вы не можете сделать это в операторе UPDATE, update обновляет только то, что уже есть в таблице.

если вы хотите дублировать свои записи, изменяя одно поле, вы можете сделать следующее:

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

(обратите внимание, что все это выполняется как один оператор) также обратите внимание, что мы выбираем 6 вместо locationType из таблицы.

То, что мы делаем здесь, это простовыберите из таблицы все, указав тип местоположения 6 и вставив его обратно в таблицу.

1 голос
/ 31 марта 2011

Я не думаю, что это можно сделать одним запросом. Однако вы можете вставить повторяющиеся строки с 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;
1 голос
/ 31 марта 2011

Сначала выполните обновление, как вы уже описали:

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

Это не в одном утверждении, но он выполнит работу, если выВы беспокоитесь о несоответствиях, а затем просто оберните транзакцию вокруг двух операций .

...