Mysql 如何在SQL中使用重复密钥更新
我必须在关于重复键更新中插入新的和现有的更新,Mysql 如何在SQL中使用重复密钥更新,mysql,sql,Mysql,Sql,我必须在关于重复键更新中插入新的和现有的更新,值的参数必须是列的名称;它返回本应插入新行的值。如果要使用其他值,只需将表达式放在那里,而不使用值 但您不需要多个子查询。使用选择查询作为要插入的值的源 此外,您不需要指定作为唯一键一部分的列的值,只需要指定要更新的列。我假设在您的表中,唯一键是患者id和策略id的组合 INSERT INTO policy_consent_status (patien_ID,policy_ID,PS_ID) VALUES ((SELECT patient_ID
值
的参数必须是列的名称;它返回本应插入新行的值。如果要使用其他值,只需将表达式放在那里,而不使用值
但您不需要多个子查询。使用选择
查询作为要插入的值的源
此外,您不需要指定作为唯一键一部分的列的值,只需要指定要更新的列。我假设在您的表中,唯一键是患者id
和策略id
的组合
INSERT INTO policy_consent_status (patien_ID,policy_ID,PS_ID)
VALUES
((SELECT patient_ID FROM patient WHERE first_name="Christine"),(SELECT policy_ID
FROM policy WHERE policy_name="PI"),6)
ON DUPLICATE KEY
UPDATE
patien_ID = VALUES((SELECT patient_ID FROM patient WHERE first_name="Christine")),
policy_ID = VALUES((SELECT policy_ID FROM policy WHERE policy_name="PI"))
PS_ID = 6
您应该首先编写一个select查询,从患者加入策略中进行选择。使其正常工作,然后转储values子句-有关如何使用insert..select..on duplicate key Show DETATION表结构的示例,请参阅手册。什么唯一索引会导致重复?我尝试过这样做,但每次都会插入一个新的索引,而不是更新数据row@ChristineShaji您是否定义了患者id的唯一字段,该表中的policy_id???@Zeljka该表是一个关系表,patient_id和policy_id是外键。@它的关系表与否无关,如果要对重复键使用
,
,这些字段需要在该表中定义为唯一的
INSERT INTO policy_consent_status (patient_ID,policy_ID,PS_ID)
SELECT patient_id, policy_id, 6
FROM patient
CROSS JOIN policy
WHERE first_name="Christine"
AND policy_name="PI"
ON DUPLICATE KEY UPDATE PS_ID = VALUES(PS_ID)