Подтвердить что ты не робот

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, как легко, просто;-) Спасибо!

4b9b3361

Ответ 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;

Ответ 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, которая действительно что-то сделала.