#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; Так что да, пришлось объединить оба ваших совета.