我的表结构如下:
Id(PK AI) | DataField1(Varchar) | DataField2(Varchar) | User_Id(int)
1 | abc | xyz | 12
2 | sdj | mnu | 09
3 | yjf | pku | 17
4 | anx | vby | 11
我想插入或更新此表。
假设我希望将数据插入DataField1='wer', DataField2='try'
where User_Id = 11
,前提是给定User_Id
的记录
不存在。如果存在User_Id=11
的记录,则更新记录。
我想要一个查询,而不是多个查询。
请注意User_Id
并非唯一。 Id
是自动增量的主键,因此我没有触及该字段。
我想要的东西类似于'重复密钥更新'。据我所知,这个查询没有'where condition'。
答案 0 :(得分:2)
我知道您说您想要一个查询,但如果User_Id
列不是唯一的,则无法进行查询。您可以使用以下两个查询来执行此操作:
UPDATE yourTable
SET DataField1='wer', DataField2='try'
WHERE User_Id = 11;
INSERT INTO yourTable (DataField1, DataField2, User_Id)
SELECT 'wer', 'try', 11
FROM dual
WHERE NOT EXISTS (SELECT * FROM yourTable WHERE User_Id = 11)
当表中已存在用户ID时,第二个查询中的WHERE
子句使SELECT
查询返回空结果。
答案 1 :(得分:0)
Try below code for update and insert If Id exists :
IF EXISTS(SELECT 1 FROM yourTable WHERE User_Id = @User_Id)
BEGIN
UPDATE yourTable SET DataField1='wer', DataField2='try'
WHERE User_Id = @User_Id
END
ELSE
BEGIN
INSERT INTO yourTable (DataField1, DataField2, User_Id)
SELECT 'wer', 'try', @User_Id
END
IN MYSQL :
IF EXISTS(SELECT 1 FROM wp_options WHERE option_name =
'password_protected_version')
THEN
UPDATE wp_options SET option_value='2.2.2' WHERE option_name =
'password_protected_version';
ELSE
INSERT INTO wp_options (option_value, option_name) SELECT '2.2.2',
'password_protected_version';
END IF;