【问题标题】:SQL Insert rows into table that must have 2 distinct columns but also one non distinct columnSQL将行插入必须有2个不同列但也有1个非不同列的表中
【发布时间】:2013-08-19 07:09:27
【问题描述】:

我有两张桌子,一张promotion table 和一张prize table

CREATE TABLE PRIZE(
     PRIZEID INT NOT NULL PRIMARY KEY,
     COST DOUBLE NOT NULL,
     PRIZENAME VARCHAR(100) NOT NULL,
)

CREATE TABLE PROMOTION (
     PROMOTIONID    INTEGER NOT NULL,
     LEVEL  INTEGER NOT NULL,
     AMOUNT NOT NULL,
     COST   DOUBLE  NOT NULL    DEFAULT 0,
     PRIZENAME  VARCHAR(100)    NOT NULL    DEFAULT ' ',
     PRIZEID    INTEGER
) 

prize table 当前为空,我想将记录从promotion table 复制到prize table。在这样做时,我只想选择那些在两列中具有唯一值的记录,prizenamecost。之后我将从promotion 删除这些列。

现在我有下面的sql语句

INSERT INTO prize(PRIZEID, COST, PRIZENAME)
SELECT r.PRIZEID, r.COST, r.PRIZENAME 
FROM PROMOTION r;

但这会将所有记录插入prize table。我意识到我可以在 select 中使用 distinct 关键字来选择 costprizename 的唯一实例,但在我的情况下,prizeid 将始终是唯一的,因为 distinct 关键字适用于 select 子句中的所有列没用。

提前致谢!

【问题讨论】:

  • 为什么奖品有多个奖品ID?
  • 推广表有重复奖品。这是一个预先存在的表,我正在尝试将奖品信息与促销信息分开,然后通过主键-外键关系将这两个表关联起来。

标签: sql select insert db2 distinct


【解决方案1】:

您只需将 PRIZEID 值替换为新值即可。因为听起来您目前在 PROMOTION 表上有重复项

首先将所有不同的PRIZENAMEs 和COSTs 添加到您的新PRIZE 表中:

INSERT INTO prize(PRIZEID, COST, PRIZENAME)
SELECT DISTINCT (SELECT MAX(PRIZEID)+1 FROM PRIZE), r.COST, r.PRIZENAME 
FROM PROMOTION r;

然后使用新的PRIZEID 更新您的PROMOTIONs 表

UPDATE PROMOTION R
SET R.PRIZEID = 
   (SELECT P.PRIZEID 
    FROM PRIZE 
    WHERE P.PRIZENAME=R.PRIZENAME
    AND P.COST=R.COST);

然后,我认为您可以从那里安全地删除 PROMOTIONs 表中的列

【讨论】:

    【解决方案2】:

    这将根据奖品名称和费用获得唯一奖品,并获得该组的最低奖品。

    INSERT INTO prize(PRIZEID, COST, PRIZENAME)
    SELECT MIN(r.PRIZEID), r.COST, r.PRIZENAME 
    FROM PROMOTION r
    GROUP BY r.COST, r.PRIZENAME
    ;
    

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多