如果 id 不存在则插入,如果存在则忽略,如果任何字段不同则插入新的
INSERT INTO if id does not exist, ignore if it exists and insert new if any fields are different
我有一个 table 的人和地址。这些地址经常被提供给数据库并且它们不会改变,但如果他们改变了,我想保留最后一个地址并添加新地址,并带有时间戳。
此 table 中没有主键。 person_id 是 Persons table
中的关键
- 如果person_id不存在,将数据添加到table
- 如果person_id存在且详情都一样,忽略
- 如果 person_id 存在并且任何细节不同,请添加数据。
我尝试了很多其中的东西:
INSERT INTO addresses (person_id,street,zip,timestamp) SELECT ("1","122
Farm", "4422",CURRENT_TIMESTAMP) FROM addresses WHERE NOT EXISTS
(SELECT person_id,street,zip FROM addresses WHERE person_id = "1" AND
street = "122 Farm" AND zip = "4422")
谢谢!
我刚刚找到的解决方案是:
1- 创建相关字段的唯一索引:
ALTER TABLE addresses ADD UNIQUE INDEX a_uindex (person_id,street,zip)
然后使用:
INSERT IGNORE INTO addresses VALUES ("1","122 Farm","4422", CURRENT_TIMESTAMP)
我有一个 table 的人和地址。这些地址经常被提供给数据库并且它们不会改变,但如果他们改变了,我想保留最后一个地址并添加新地址,并带有时间戳。
此 table 中没有主键。 person_id 是 Persons table
中的关键- 如果person_id不存在,将数据添加到table
- 如果person_id存在且详情都一样,忽略
- 如果 person_id 存在并且任何细节不同,请添加数据。
我尝试了很多其中的东西:
INSERT INTO addresses (person_id,street,zip,timestamp) SELECT ("1","122
Farm", "4422",CURRENT_TIMESTAMP) FROM addresses WHERE NOT EXISTS
(SELECT person_id,street,zip FROM addresses WHERE person_id = "1" AND
street = "122 Farm" AND zip = "4422")
谢谢!
我刚刚找到的解决方案是: 1- 创建相关字段的唯一索引:
ALTER TABLE addresses ADD UNIQUE INDEX a_uindex (person_id,street,zip)
然后使用:
INSERT IGNORE INTO addresses VALUES ("1","122 Farm","4422", CURRENT_TIMESTAMP)