如果我的表中存在唯一值,如何更新它,如果不存在则添加它?在我的SQL中,OBJECTID是我的主键。我正在比较两个数据表,然后将记录追加到一个表LatestData,其中OctoberExport中的值与SeptExport中的值不匹配。
INSERT INTO LatestData ( OBJECTID, LINING_MATERIAL )
SELECT OctoberExport.OBJECTID, OctoberExport.LINING_MATERIAL
FROM OctoberExport
WHERE (((OctoberExport.OBJECTID) Not In (SELECT SeptExport.OBJECTID FROM SeptExport WHERE OctoberExport.OBJECTID = SeptExport.OBJECTID AND OctoberExport.LINING_MATERIAL = SeptExport.LINING_MATERIAL)));
答案 0 :(得分:0)
MySQL中有一个名为on duplicate
的函数。如果值不存在,您可以告诉您的查询添加值,如果有,请插入它。
如果指定ON DUPLICATE KEY UPDATE,则插入一行 会导致UNIQUE索引或PRIMARY KEY中的重复值 执行旧行的更新。
示例(摘自mysql.com):
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
答案 1 :(得分:0)
PRIMARY KEY
约束强制执行唯一性。由于表的主键是OBJECTID
列,因此无法插入具有相同 OBJECTID
值的其他行。
为了在表中有两个具有相同OBJECTID
值的行,您需要更改表的PRIMARY KEY
以包含一些其他列(或列)以使其唯一。
例如,您可以添加另一列EXPORT_MONTH
。来自SeptExport
表的行将具有一个值,OctExport
表中的行将具有不同的值,因此可以将这两行添加到表中。
ALTER TABLE LatestData ADD EXPORT_MONTH VARCHAR(12) NOT NULL DEFAULT '';
您可以使用UPDATE语句将现有行的值设置为空字符串以外的值。
更改PRIMARY KEY约束可能会有点复杂,尤其是如果您有外键引用。但是你需要最终得到这样的主键约束:
PRIMARY KEY (OBJECTID, EXPORT_MONTH)
(有时候,创建一个新表,然后从现有表中复制行,重命名表就是这样做的改变。)
最终结果是您可以在表格中包含这样的行:
OBJECTID EXPORT_MONTH LINING_MATERIAL
-------- ------------ ---------------
12345 SeptExport Aluminum
12345 OctExport Platinum
(我不清楚你要问的是什么,但鉴于OBJECTID
有一个独特的约束,它不可能在{中有两个具有相同值的行{1}}。)