如何根据某些条件插入或更新?

时间:2013-04-08 22:46:59

标签: mysql insert-update

有人可以帮我这个!我有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日期之前,则会使用新的startstop日期创建新的定价记录。

谢谢!

1 个答案:

答案 0 :(得分:0)

...使用表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 演示