我有一个工作流程表,其中包含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
我遇到的问题是这不起作用,因为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
我想插入任何一条记录,没关系。如何在单个插入语句中完成此操作?
答案 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
UPDATE
和REPLACE
答案 1 :(得分:-1)
您可以使用GROUP BY为您执行此操作。您可以按如下方式更改查询的SELECT部分:
SELECT patient_id, pat_firstname, pat_lastname
FROM workflow
GROUP BY patient_id