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 очень проста ;-) Спасибо!

73 голоса | спросил acme 9 MarpmWed, 09 Mar 2011 17:52:35 +03002011-03-09T17:52:35+03:0005 2011, 17:52:35

5 ответов


0

Так просто, как это:

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;
ответил krtek 9 MarpmWed, 09 Mar 2011 17:55:23 +03002011-03-09T17:55:23+03:0005 2011, 17:55:23
0
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;
ответил Ken 9 MarpmWed, 09 Mar 2011 17:58:30 +03002011-03-09T17:58:30+03:0005 2011, 17:58:30
0
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 /а /вставка-select.html

ответил Jeff Fritz 9 MarpmWed, 09 Mar 2011 17:56:05 +03002011-03-09T17:56:05+03:0005 2011, 17:56:05
0

РЕДАКТИРОВАТЬ - прочитав комментарий к ответу @ Krtek.

Я полагаю, вы запрашиваете обновление вместо вставки -

update config set domain = 'www.example.com'

Это обновит все существующие записи в таблице конфигурации с доменом как «www.example.com» без создания дублирующих записей.

СТАРЫЙ ОТВЕТ -

вы можете использовать что-то вроде -

INSERT INTO config (id, customer_id, domain)
select id, customer_id, domain FROM config

Примечание. - Это не будет работать, если у вас есть идентификатор в качестве первичного ключа

ответил Sachin Shanbhag 9 MarpmWed, 09 Mar 2011 17:56:44 +03002011-03-09T17:56:44+03:0005 2011, 17:56:44
0

Выполнить этот оператор SQL:

-- Do nothing.

Вы хотите выбрать отдельные строки из «config» и вставить эти же строки в одну и ту же таблицу. Они уже там. Ничего не поделаешь.

Если вы на самом деле просто не хотите обновить некоторые или все значения в столбце "домен". Это потребовало бы оператора UPDATE, который действительно что-то сделал.

ответил Mike Sherrill 'Cat Recall' 9 MarpmWed, 09 Mar 2011 18:01:16 +03002011-03-09T18:01:16+03:0006 2011, 18:01:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132