我有购物车和物品表如下
Cart
+---------+-------------+
| cart_id | customer_id |
+---------+-------------+
| 1 | 1 |
| 2 | 2 |
+---------+-------------+
和
Item
+---------+---------+------------+------------+
| item_id | cart_id | product_id | quantity |
+---------+---------+------------+------------+
| 1 | 1 | AAAA | 7 |
| 2 | 1 | BBBB | 2 |
| 3 | 2 | AAAA | 5 |
| 4 | 2 | CCCC | 3 |
+---------+---------+------------+------------+
我想写一个查询,将一个购物车中的项目添加到另一个购物车。例如,将cart2中的项目转换为cart1。在这个查询之后,表的内容应该是这样的
Item
+---------+---------+------------+------------+
| item_id | cart_id | product_id | product_id |
+---------+---------+------------+------------+
| 1 | 1 | AAAA | 5 |
| 2 | 1 | BBBB | 2 |
| 4 | 1 | CCCC | 3 |
+---------+---------+------------+------------+
表有这样的输出,因为加法的工作方式如下
产品aaaa同时存在于cart1和cart2中,因此cart1更新数量=5表示item1,cart2删除item3
项2未更改,因为cart2中没有此类项
cart1中没有product\u id=cccc的项目,因此它将item4的cart\u id更改为cart1
应删除cart2,因为cart2中的项合并到cart1中
2条答案
按热度按时间iq3niunx1#
虽然您的论点“我不需要插入新值…”可能是正确的,但@gordonlinoff提供的插入过程比设计的任何更新都要简单得多,因此可能更容易理解。然而,缺少的是从两个表中删除现在已停用的购物车。可以通过级联cte(?)或sql函数来处理。因为我不关心级联dml cte,所以我将提供一个函数。
一旦我知道了涉及的cart\u id,我就调用merge\u carts函数。
关键的问题是你要确保你的“匿名用户”被识别为客户2实际上是客户1。
请参阅此处的完整案例示例。
aurhwmvo2#
我想写一个查询,将一个购物车中的项目添加到另一个购物车。例如,将cart2中的项目转换为cart1。
如果你想做一个“向上插入”--然后
update
以及insert
在同一语句中--在冲突中使用`on。以唯一键开始:
然后: