Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过比较值进行sql插入或更新_Mysql_Sql - Fatal编程技术网

Mysql 通过比较值进行sql插入或更新

Mysql 通过比较值进行sql插入或更新,mysql,sql,Mysql,Sql,假设我有一个这样的表,有很多行: id | a | b | c 在每次插入之前,应检查是否有一行具有相同的“a”和“b”,如果是,则不插入,而是通过汇总其c来更新该行上的“c” 如何在sql中实现这一点?下面是一个使用ON DUPLICATE KEY的示例: 您必须在a和b上创建一个唯一密钥 改变我的桌子 添加唯一密钥idx_ab(a,b) 插入或更新 INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KE

假设我有一个这样的表,有很多行:

id | a | b | c
在每次插入之前,应检查是否有一行具有相同的“a”和“b”,如果是,则不插入,而是通过汇总其c来更新该行上的“c”

如何在sql中实现这一点?

下面是一个使用ON DUPLICATE KEY的示例:

您必须在a和b上创建一个唯一密钥

改变我的桌子 添加唯一密钥idx_ab(a,b)

插入或更新

INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6)
    ON DUPLICATE KEY UPDATE c=c+VALUES(c);
样本

MariaDB [yourSchema]> select * from my_table;
Empty set (0.00 sec)

MariaDB [yourSchema]> INSERT INTO my_table (a,b,c) VALUES (1,2,3),(4,5,6)     ON DUPLICATE KEY UPDATE c=VALUES(c);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [yourSchema]> select * from my_table;
+----+------+------+------+
| id | a    | b    | c    |
+----+------+------+------+
|  6 |    1 |    2 |    3 |
|  7 |    4 |    5 |    6 |
+----+------+------+------+
2 rows in set (0.00 sec)

MariaDB [yourSchema]> INSERT INTO my_table (a,b,c) VALUES (1,2,99) ON DUPLICATE KEY UPDATE c=VALUES(c);
Query OK, 2 rows affected (0.05 sec)

MariaDB [yourSchema]> select * from my_table;
+----+------+------+------+
| id | a    | b    | c    |
+----+------+------+------+
|  6 |    1 |    2 |   99 |
|  7 |    4 |    5 |    6 |
+----+------+------+------+
2 rows in set (0.00 sec)

MariaDB [yourSchema]>

你试过触发器吗?不要使用触发器。使用插入。。。。在重复键上,如果所有行上都有唯一的索引,则该键将同时执行这两项操作。我将发布一个示例作为答案,如果它是oracle的话?Nancy Guruswamy-不,只有MySQL/MariaDB。我不知道怎么穿上它ORACLE@NancyGuruswamy-我已经在我的answer@Nancy古鲁斯瓦米-我在我的回答中为您添加了一个带总和的样本。在我的回答中我看不到它。。。。重复密钥更新时c=c+值(c);