我的表格字段是
SELECT `ogr_no`, `yurt_id`, `kat_no`, `kat_ismi`, `gorev_bol_ismi`, `baskan_mi`, `tarih` FROM `s_yem_tem` WHERE 1
此处ogr_no
和yurt_id
是我的条件;如果它们同时存在且真实,那么我需要更新其余部分,如果不是我需要插入。通过两个查询,我能够解决我的需求,但如何使用一个查询来处理它。做了很多搜索。 ON DUPLICATE KEY
根据一个值解决问题,但我需要检查其中两个。
我需要的最接近的逻辑是
IF EXISTS(SELECT * FROM s_yem_tem WHERE s_yem_tem.ogr_no = 101 AND s_yem_tem.yurt_id = 1)
THEN
UPDATE s_yem_tem SET kat_no = 1, kat_ismi = 'Mescid Katı', gorev_bol_ismi = 'Etüt', baskan_mi = '1'
ELSE
INSERT INTO s_yem_tem ( ogr_no, yurt_id, kat_no, kat_ismi, gorev_bol_ismi, baskan_mi)
VALUES (101,1,4,'Yemekhane Katı','Etüt',0)
但不适用于MySQL。任何建议请
答案 0 :(得分:1)
您可以创建一个包含您正在检查的两列的唯一索引,这样您就可以使用ON DUPLICATE KEY。
答案 1 :(得分:1)
此操作称为upsert,在MySQL中使用insert . . . on duplicate key update
实现。
首先,您需要一个唯一的索引/约束来识别重复项:
create unique index unq_s_yem_tem_2 on s_yem_tem(ogr_no, yurt_id);
然后你会这样做:
INSERT INTO s_yem_tem ( ogr_no, yurt_id, kat_no, kat_ismi, gorev_bol_ismi, baskan_mi)
VALUES (101, 1, 4, 'Yemekhane Katı', 'Etüt', 0)
ON DUPLICATE KEY UPDATE
kat_no = 1, kat_ismi = 'Mescid Katı', gorev_bol_ismi = 'Etüt', baskan_mi = 1;
两件事。我发现yurt_id
非常令人回味。我不认为我曾经使用过有蒙古包的数据库。
其次,通常,on duplicate key
上的列会获取更新中指定的值。我注意到你的几列不同。