MySQL: как вставить запись для каждого результата в SQL-запрос?
Скажем, у меня есть выбор
SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';
который возвращает некоторые записи.
Как я могу сделать вставку для строки достижений в наборе результатов, например
INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');
где @id
и @customer_id
- поля строки в наборе результатов?
edit: я не хотел просто дублировать его, но вместо этого введет новое значение в поле domain
. Тем не менее, ситуация с facepalm, как легко, просто;-) Спасибо!
Ответы
Ответ 1
Проще всего это:
INSERT INTO config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, domain FROM config;
Если вы хотите "www.example.com
" в качестве домена, вы можете сделать:
INSERT INTO config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;
Ответ 2
INSERT INTO Config (id, customer_id, domain)
SELECT DISTINCT id, customer_id, 'www.example.com' FROM config
Документация MySQL для этого синтаксиса находится здесь:
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
Ответ 3
INSERT INTO config (id, customer_id, domain)
SELECT id, customer_id, 'www.example.com' FROM (
SELECT DISTINCT id, customer_id, domain FROM config
WHERE type = 'foo'
) x;
Ответ 4
РЕДАКТИРОВАТЬ - после прочтения комментария к ответу @Krtek.
Я предполагаю, что вы запрашиваете обновление вместо вставки -
update config set domain = 'www.example.com'
Это приведет к обновлению всех существующих записей в таблице конфигурации с доменом как "www.example.com" без создания дубликатов записей.
OLD ANSWER -
вы можете использовать что-то вроде -
INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config
Примечание. - Это не будет работать, если у вас есть id как первичный ключ
Ответ 5
Выполнить этот оператор SQL:
-- Do nothing.
Вы хотите выбрать отдельные строки из "config" и вставить те же самые строки в одну и ту же таблицу. Они уже там. Нечего делать.
Если вы просто не хотите обновлять некоторые или все значения в столбце "домен". Для этого потребуется инструкция UPDATE, которая действительно что-то сделала.