考虑两个具有多对多关系的表:

Company           Speciality
---------         ---------
id                id
---------         ---------
1                 21
2                 22
3                 23
4


CompanySpeciality
--------------------------
company_id | speciality_id
--------------------------
1          | 21
1          | 22
4          | 21
4          | 23


我要删除公司4,并将其专长与公司1相关联。
如果我在CompanySpeciality上使用简单的UPDATE语句来设置“ company_id = 1 WHERE company_id = 4”,那么我将面临主要的违规行为,因为对1 | 21已经存在。

是否可以通过单个查询更新关系表?此查询应仅影响不会重复的行。

结果将是:

CompanySpeciality
--------------------------
company_id | speciality_id
--------------------------
1          | 21
1          | 22
1          | 23

最佳答案

您不想UPDATE,您想INSERT and ignore dupes

INSERT IGNORE INTO CompanySpeciality (company_id, speciality_id)
SELECT 1, speciality_id
FROM CompanySpeciality
WHERE company_id=4

关于mysql - 在不违反主要约束的情况下更新多对多关系表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14586724/

10-08 22:32