ВСТАВКА MySQL с использованием переменных из нескольких таблиц

#mysql #sql

#mysql #sql

Вопрос:

У меня есть две таблицы, идентификаторы которых я хочу сравнить, используя базы данных SQL из WordPress.

Следующее работает нормально:

 INSERT INTO entries(author_name) 
SELECT meta_value 
FROM wp_postmeta 
WHERE meta_key = "user_submit_name" AND post_id = '5235';
  

Но то, что я хочу сделать, это сравнить идентификаторы из записей таблиц и wp_postmeta в любое время, когда идентификаторы совпадают, вот так:

 INSERT INTO entries(author_name) 
SELECT meta_value 
FROM wp_postmeta 
WHERE meta_key = "user_submit_name" AND post_id = entries.post_id;
  

Но вышеуказанное не работает.
Возможно ли сделать это в одной строке, или мне нужно создать процедуру?

Ответ №1:

Вы можете это сделать, вам просто нужно использовать соединение.

 INSERT INTO entries(author_name) 
SELECT meta_value 
FROM wp_postmeta
JOIN entries on wp_postmeta.post_id = entries.post_id
WHERE meta_key = "user_submit_name" AND post_id = entries.post_id;
  

Это приведет к вставке мета_значения в записи, где когда-либо есть post_id в таблице записей, совпадающий с wp_postmeta. Это означает, что если вы дважды запустите инструкцию insert, вы попытаетесь выполнить одну и ту же вставку дважды. Если это проблема, мы можем добавить дополнительный выбор, чтобы не вставлять повторяющиеся записи. Кроме того, если имеется более одной записи с одинаковым идентификатором записи, у нас будет такая же проблема. Однако данный оператор sql должен работать для одного запуска, где записи post_id уникальны для таблицы записей.

Комментарии:

1. Большое спасибо! Я не могу поверить, что я не использовал JOIN (я новичок). К сожалению, это добавляет дополнительные строки со значением author_name, заполненным, а все остальное равно null, а не изменяется. Должен ли я использовать ОБНОВЛЕНИЕ вместо этого?

2. Еще раз, спасибо вам обоим! Вот код, который в итоге сработал: ОБНОВИТЕ записи, ПРИСОЕДИНИТЕСЬ к wp_postmeta, УСТАНОВИТЕ author_name = wp_postmeta.meta_value, ГДЕ wp_postmeta.meta_ket = «user_submit_name» И poem_id = wp_postmeta.post_id; Так что да, пришлось объединить оба ваших совета.