2013-10-30 133 views
3

我有一个工作流表,其中有patient_idpat_firstname,pat_lastname数据。我想将这些数据提取到患者表中。mySQL插入并选择

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

我遇到的问题是,这并不工作,因为patient_id是在患者表的主键和一些FIRST_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

你有两个选择:

使用INSERT IGNORE:这不会修改现有的值

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

,或者您可以使用REPLACE:此选项将插入,更新该DATAS。

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

如果在保存ressources事项,不建议REPLACE

检查MySQL文档,详细了解INSERTUPDATEREPLACE

+0

我不确定你在说什么。你能否提供每个例子? –

+0

我用你的例子编辑了我的答案;) – Asenar

+0

这实际上与REPLACE很好:)我没有意识到这存在,谢谢! –

-1

您可以使用GROUP BY来为你做这个。您可以更改您的查询的SELECT部分​​,如下所示:

SELECT patient_id, pat_firstname, pat_lastname 
FROM workflow 
GROUP BY patient_id