sql - 如果存在重复行,则增加 SQL 数据库中的列值
问题描述
假设我有一个这样的表:
Number Product Type
1 Meat Cow
1 Milk A
如果我插入一个新行:
INSERT INTO t1 (Product, Type) VALUES (Meat, Cow)
我不想要一个新行。我希望 Product = Meat 和 Type = Cow 的列“数字”增加 1:
Number Product Type
2 Meat Cow
1 Milk A
是否有执行此操作的 SQL 命令?
解决方案
您可以使用ON CONFLICT
从 version 开始的方法尝试以下操作9.5
:
create table t1( Number int,
Product varchar(15),
Type varchar(15),
primary key (Product, Type)
);
insert into t1(Number,Product,Type) values(1,'Meat','Cow');
insert into t1(Number,Product,Type) values(1,'Meat','Cow')
on conflict (Product,Type) do update set Number = t1.Number + 1;
select * from t1;
number product type
------ ------- ----
2 Meat Cow
其中复合唯一(主)键是必须的Product
和Type
列,如果不存在,则超过42P10:没有唯一或排除约束匹配 ON CONFLICT 规范错误引发。
推荐阅读
- gitlab - Gitlab共享运行器为每个项目设置并发
- python-3.x - ImageDataGenerator - 使用 model.fit 而不是 model.fit_generator 进行训练
- arrays - 在冒泡排序中实现数组
- javascript - 单击输入字段时保持html突出显示?
- html - 如何使用纯 css 将 Font Awesome 图标放在输入标签中
- react-native - 制作项目结构的最佳实践 - React Native
- react-intl - react-intl 的大小写与底层文件系统不匹配
- flutter - Flutter中如何将一些功能变成独立的Widget?
- r - R 中的 AODE 机器学习
- kubernetes - gunicorn 20.0.4 忽略 --threads 参数