Как обновить две таблицы в одном утверждении?

0
UPDATE table1, tmpList
  SET table1.ts = tmpList.ts_value
WHERE table1.id = tmpList.id

UPDATE table2, tmpList
  SET table2.ts = tmpList.ts_value
WHERE table2.id = tmpList.id

Я использую MySQL

  • 0
    что вы подразумеваете под "в одном утверждении"?
Теги:

4 ответа

2
Лучший ответ

Предполагая, что каждый идентификатор появляется в обеих таблицах (в идеале только один раз):

update tmpList inner join table1 using (id) inner join table2 using (id)
    set table1.ts = tmpList.ts_value, table2.ts=tmpList.ts_value;

Обновление: просто использование левых соединений вместо внутренних соединений делает эту работу даже для идентификаторов, которые находятся только в одной таблице - неприменимое предложение предложения кажется просто пропущенным; Я должен был попробовать это раньше, видимо.

  • 0
    Это в основном то, что я хочу, но не уверен, что это работает.
  • 0
    Да, это работает, в ситуации, которую я описываю.
Показать ещё 1 комментарий
1

Зачем вам одно выражение? Вы беспокоитесь о том, что один из них завершился, а другой - неудачным, оставив половину обновленного беспорядка?

Идентификатор, что дело, транзакции - это то, что вам нужно. например.

begin work;

UPDATE table1, tmpList
  SET table1.ts = tmpList.ts_value
WHERE table1.id = tmpList.id;

UPDATE table2, tmpList
  SET table2.ts = tmpList.ts_value
WHERE table2.id = tmpList.id;

commit work;

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

1

http://dev.mysql.com/doc/refman/5.0/en/update.html

-1

нет, это невозможно, если вы используете простые запросы. Я не знаком с моим sql, но в oracle нельзя обновлять сразу две таблицы.

  • 1
    MySql имеет возможность обновления нескольких таблиц. Скоро появится основная база данных рядом с вами. Скоро 5+ лет и / или крупные релизы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню