mySQL Insert into with Select

时间:2013-10-30 16:27:38

标签: mysql sql select insert distinct

我有一个工作流程表,其中包含patient_idpat_firstnamepat_lastname数据。我想将这些数据提取到患者表中。

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

我遇到的问题是这不起作用,因为patient_id是Patients表中的主键,并且某些first_name字段或last_name字段不匹配,因此尝试插入重复项。

我想要的是只使用工作流表中的任何记录作为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

我想插入任何一条记录,没关系。如何在单个插入语句中完成此操作?

2 个答案:

答案 0 :(得分: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 UPDATEREPLACE

答案 1 :(得分:-1)

您可以使用GROUP BY为您执行此操作。您可以按如下方式更改查询的SELECT部分​​:

SELECT patient_id, pat_firstname, pat_lastname
FROM workflow
GROUP BY patient_id