如何根据某些条件插入或更新?
Posted
技术标签:
【中文标题】如何根据某些条件插入或更新?【英文标题】:How to insert or update based on some condition? 【发布时间】:2013-03-31 04:48:15 【问题描述】:有人可以帮我解决这个问题吗!我有 2 张桌子:
1.具有自定义日期相关定价窗口的现有定价表:
id | prod id | start | stop | price
-----+---------+------------+------------+-----------
1 | 65210 | 2012-01-01 | 2013-01-01 | 5.00
2 | 54841 | 2012-02-05 | 2013-03-01 | 15.00
3 | 51518 | 2012-01-01 | 2013-01-01 | 5.00
4 | 8402 | 2012-01-01 | 2017-01-01 | 5.00
5 | 1520 | 2012-01-01 | 2050-01-01 | 12.00
6 | 959 | 2013-10-01 | 2018-01-01 | 5.00
2.“新”定价数据表(用于更新上面每个唯一prod id
的表):
prod id | start | stop | price
-------+------------+------------+-----------
65210 | 2013-01-01 | 2025-01-01 | 5.00
54841 | 2013-02-05 | 2017-03-01 | 15.00
959 | 2013-01-01 | 2017-01-01 | 5.00
假设它仍然“在窗口中”,用表 2 中的 stop
日期更新表 1 中的 stop
日期的最佳方法是什么?如果现有的stop
日期早于“新”start
日期,则会使用新的start
和stop
日期创建新的定价记录。
谢谢!
【问题讨论】:
欢迎堆栈溢出。请展示您迄今为止尝试过的内容,以及无效的内容。否则您的问题可能会被关闭,因为这不是“为我做”网站。 另外,它有助于包含您正在使用的 SQL 平台。我猜它是 mysql,但您应该将平台包含为标签 并考虑提供一个带有所需结果集的 sqlfiddle 【参考方案1】:...用表 2 中的 stop
日期更新表 1 中的 stop
日期,假设它仍然“在窗口中”...
UPDATE price p JOIN new_price n
ON p.prod_id = n.prod_id
AND n.start BETWEEN p.start AND p.stop
SET p.stop = n.stop
插入一条新记录“...如果现有的stop
日期早于新的start
日期...”
INSERT INTO price (`prod_id`, `start`, `stop`, `price`)
SELECT n.prod_id, n.start, n.stop, n.price
FROM new_price n JOIN price p
ON n.prod_id = p.prod_id
AND n.start > p.stop
这里是SQLFiddle演示
【讨论】:
以上是关于如何根据某些条件插入或更新?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pandas 或 Python 中根据某些条件放置项目?
如何根据 Oracle SQL 中的某些条件将列拆分为 2?
T-SQL:在 UPDATE 语句中使用 CASE 根据条件更新某些列