MYSQL: обновить таблицу значениями из другой связанной таблицы

0

У меня есть две таблицы MySQL, вот как они структурированы:

table foo(
 foo_id varchar(32),
 field1 varchar(32),
 field2 varchar(32),
 bar_id varchar(32) 
);

table bar(
  bar_id varchar(32),
  field1 varchar(32),
  field2 varchar(32)
);

Я хотел бы обновить таблицу foo, чтобы иметь те же значения для field1 и field2, что и таблица bar. Я пробовал следующие два запроса, оба из которых выполняются без ошибок, но не получают мне результаты, которые я хочу:

UPDATE foo LEFT JOIN bar ON foo.bar_id = bar.bar_id 
SET foo.field1 = bar.field1 AND foo.field2 = bar.field2;

и

UPDATE foo,bar SET foo.field1 = bar.field1 
AND foo.field2 = bar.field2 WHERE foo.bar_id = bar.bar_id

но не работают. что мне здесь не хватает?

  • 0
    я не нахожу ничего плохого в ваших запросах. Я предлагаю использовать оператор select и найти строки, которые будут обновлены в соответствии с приведенным выше положением. например: select foo.*, bar.* from foo LEFT JOIN bar ON foo.bar_id = bar.bar_id SET foo.field1 = bar.field1 AND foo.field2 = bar.field2;
  • 0
    @KoolKabin в MySQL, вы не можете одновременно выбирать и обновлять таблицу в одном запросе
Показать ещё 1 комментарий
Теги:
sql-update
join

1 ответ

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

Я думаю, может быть, у вас проблемы с AND; вместо этого должна быть запятая. Таким образом, я думаю, что вы обновляете foo.field1, чтобы стать (bar.field1 AND foo.field2 = bar.field2) (логическая связь между не-нулесообразностью bar.field1 и равенством field2 -s), и я почти уверен, что не то, что вы имели в виду. Не тестировал; может быть неправильным.

  • 0
    Вы правы, это была проблема. Хотя я нахожу странным, что это не было синтаксической ошибкой некоторого рода в MySQL. Я предполагаю, что мне показалось, что я имел в виду SET foo.field1 = (bar.field1 AND foo.field2 = bar.field2) и установил значение в логическое значение
  • 0
    MySQL имеет довольно разрешающее неявное приведение, и = работает как для назначения, так и для сравнения в SQL, так что ... нет, ошибок нет. :)

Ещё вопросы

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