SQL根据某些条件从另一个表中插入/更新到一个表中

问题描述

我有一个名为table1的表,如下所示:

+-----------+-------+
| productid | stock |
+-----------+-------+
|         1 |    10 |
|         2 |    20 |
|         3 |    30 |
+-----------+-------+

我需要从另一个名为table2的表中插入/更新到上表:

+-----+-------+
| PId | stock |
+-----+-------+
|   1 |    20 |
|   2 |    40 |
|   4 |    10 |
+-----+-------+

我想在以下情况下执行SQL查询

  1. 如果表1中的Productid中存在表2中的PId,则需要更新库存值。
  2. 如果table1中的Productid中不存在table2中的PId,则需要将stock的值作为table2中table1中的新行插入。

因此在执行表1中的查询输出后,如下所示:

+-----------+-------+
| productid | stock |
+-----------+-------+
|         1 |    20 |
|         2 |    40 |
|         3 |    30 |
|         4 |    10 |
+-----------+-------+

当我不熟悉sql时,请帮助我获取查询。预先感谢!

解决方法

您需要MERGE语句。如今,大多数数据库管理系统都支持它:

MERGE INTO table1
USING table2
   ON table1.productid=table2.pid
WHEN MATCHED THEN UPDATE SET
  stock = table2.stock
WHEN NOT MATCHED THEN INSERT VALUES (
  table2.pid,table2.stock
)
;

SELECT * FROM table1 ORDER BY 1;
-- out  OUTPUT 
-- out --------
-- out       3
-- out (1 row)
-- out 
-- out Time: First fetch (1 row): 27.090 ms. All rows formatted: 27.155 ms
-- out  productid | stock 
-- out -----------+-------
-- out          1 |    20
-- out          2 |    40
-- out          3 |    30
-- out          4 |    10