Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL中使用重复密钥更新_Mysql_Sql - Fatal编程技术网

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)