如何使用新逻辑将多个数据表迁移到单个表中?

时间:2014-03-17 05:08:45

标签: sql sql-server sql-server-2008

我有几张桌子。让我们打电话给他们:

  1. ProductsFavorite(ProductID,BusinessID,UserID)
  2. ServicesFavorite(ServiceID,BusinessID,UserID)
  3. BusinessesFavorite(BusinessID,UserID)
  4. 以前,用户可以将商家页面添加到他们的收藏夹中。他们还可以将个别产品添加到他们的收藏夹和服务中。我把它们存放在不同的表格中。

    从那以后,我改变了网站的动态,这些都被称为“喜欢”。我现在有一张新表:

    表:喜欢

    1. 的UniqueID
    2. BusinessID
    3. 用户ID
    4. 类型
    5. UniqueID是商品的主键,(即商业,服务或产品) BusinessID是业务表中业务的主键。 UserID是users表中用户的主键。 Type是varchar,(即商业,产品,服务)

      我需要做的是将旧数据复制到新表中,但不确定如何。如果不存在,我也需要这样做。所以这里将是我想要实现的一个简单示例:

      所以我想在ProductsFavorite表中有以下内容:

      FavoriteID     ProductID     BusinessID     UserID
      ------------|-------------|--------------|---------
      1            10            230            5
      2            13            135            7
      3            6             300            5
      

      我想插入迁移,或将这些迁移到新的Likes表中,但前提是该人尚未使用新系统的产品。例如:

      UniqueID       BusinessID    Type           UserID
      ------------|--------------|-------------|---------
      10           230            Product       5
      13           135            Product       7
      6            300            Product       5
      

      我不确定管理这个的最好方法,还需要确保那里没有“双重”。新系统已经存在了几天,所以有些人可能“喜欢”他们以前“添加到收藏夹中的东西。”

      使用SQL Server 2008 R2,Management Studio等

      感谢您的帮助!

      ==========编辑===========

      我正在使用测试表取得一些进展。

      INSERT INTO Like_Test (
       UniqueID
      ,BusinessID
      ,UserID
      ,Type
      ,Date_Created
      ) 
      
      SELECT
       a.ProductID
      ,a.BusinessID
      ,a.UserID
      ,'Product'
      ,a.Date_Created
      
      FROM ProductFav a
      WHERE NOT EXISTS (SELECT * FROM Like_Test b WHERE b.UniqueID = a.ProductID AND b.UserID = a.UserID AND b.ElementType = 'Product')
      

      如果我从Like_Test表中删除前1个条目,则运行上述查询应插入单个记录。好吧,我说它应该但显然我做错了。所以此插入的WHERE子句不起作用。

0 个答案:

没有答案