Powiedz, że mam wybór
SELECT DISTINCT id, customer_id, domain FROM config WHERE type = 'foo';
która zwraca niektóre rekordy.
Jak mogę wstawić wiersz zasięgu w zestawie wyników, np
INSERT INTO config (id, customer_id, domain) VALUES (@id, @customer_id, 'www.example.com');
gdzie @id
i @customer_id
są pola wiersza w zestawie wyników?
edycja: nie chciałem go po prostu powielać, ale domain
zamiast tego wstawić nową wartość w polu . Niemniej jednak sytuacja na twarzy, ponieważ jest to po prostu łatwe ;-) Dzięki!
Odpowiedzi:
Tak proste, jak to:
INSERT INTO config (id, customer_id, domain) SELECT DISTINCT id, customer_id, domain FROM config;
Jeśli chcesz, aby
www.example.com
domena „ ” była domeną, możesz:INSERT INTO config (id, customer_id, domain) SELECT DISTINCT id, customer_id, 'www.example.com' FROM config;
źródło
domain
ustawieniem „www.example.com”, po prostu powiela wszystkie wpisy.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;
źródło
INSERT INTO Config (id, customer_id, domain) SELECT DISTINCT id, customer_id, 'www.example.com' FROM config
Dokumentacja MySQL dotycząca tej składni znajduje się tutaj:
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
źródło
EDYCJA - Po przeczytaniu komentarza do odpowiedzi @ Krtek.
Chyba prosisz o aktualizację zamiast wstawiania -
update config set domain = 'www.example.com'
Spowoduje to zaktualizowanie wszystkich istniejących rekordów w tabeli konfiguracji o domenę „www.example.com” bez tworzenia zduplikowanych wpisów.
STARA ODPOWIEDŹ -
możesz użyć czegoś takiego jak -
INSERT INTO config (id, customer_id, domain) select id, customer_id, domain FROM config
Uwaga: - To nie zadziała, jeśli masz identyfikator jako klucz podstawowy
źródło
Wykonaj tę instrukcję SQL:
-- Do nothing.
Chcesz wybrać różne wiersze z „config” i wstawić te same wiersze do tej samej tabeli. Już tam są. Nic do roboty.
Chyba że chcesz tylko zaktualizować niektóre lub wszystkie wartości w kolumnie „domain”. To wymagałoby instrukcji UPDATE, która naprawdę coś zrobiła.
źródło