mySQL Insert Into с Select

Имам таблица на работния процес, която има patient_id, pat_firstname, pat_lastname данни в нея. Искам да извлека тези данни в таблица на пациента.

INSERT INTO patients (patient_id, first_name, last_name)
SELECT DISTINCT patient_id, pat_firstname, pat_lastname
FROM workflow

Проблемът, който имам, е, че това не работи, защото пациент_ид е първичният ключ в таблицата на пациентите и някои полета за първо име или фамилно име не съвпадат, така че има дубликати, които се опитват да бъдат вмъкнати.

Това, което искам, е просто да използвам всеки от записите от таблицата на работния поток за first_name и last_name. Например, ако има:

patient_id = 2 pat_first_name = Kris pat_last_name = Doman

patient_id = 2 pat_first_name = Kristofer pat_last_name = Doman

Искам да вмъкна двата записа, няма значение. Как мога да постигна това с един оператор за вмъкване?


person Kristofer Doman    schedule 30.10.2013    source източник


Отговори (2)


Имате две възможности:

използвайте INSERT IGNORE : това няма да промени вече съществуващите стойности

INSERT IGNORE INTO patients (patient_id, first_name, last_name)
SELECT DISTINCT patient_id, pat_firstname, pat_lastname
FROM workflow

или можете да използвате REPLACE: това или ще вмъкне, или ще актуализира данните.

REPLACE INTO patients (patient_id, first_name, last_name)
SELECT DISTINCT patient_id, pat_firstname, pat_lastname
FROM workflow

Ако спестяването на ресурси има значение, REPLACE не се препоръчва.

проверете документацията на mysql за подробности относно INSERT UPDATE и REPLACE

person Asenar    schedule 30.10.2013
comment
Не съм сигурен какво казваш. Можете ли да предоставите примери за всеки от тях? - person Kristofer Doman; 30.10.2013
comment
Това всъщност работи чудесно с REPLACE :) Не знаех, че това съществува, благодаря! - person Kristofer Doman; 30.10.2013

Можете да използвате GROUP BY, за да направите това вместо вас. Можете да промените вашата SELECT част от заявката, както следва:

SELECT patient_id, pat_firstname, pat_lastname
FROM workflow
GROUP BY patient_id
person Mike Brant    schedule 30.10.2013