0

我有两张桌子, apromotion table和 a 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 tableprize 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 子句中的所有列,因此无济于事。

提前致谢!

4

2 回答 2

0

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

INSERT INTO prize(PRIZEID, COST, PRIZENAME)
SELECT MIN(r.PRIZEID), r.COST, r.PRIZENAME 
FROM PROMOTION r
GROUP BY r.COST, r.PRIZENAME
;
于 2013-08-16T20:16:04.413 回答
0

您只需将PRIZEID值替换为新值即可。因为听起来您当前的PROMOTION桌子上有重复项

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

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

然后PROMOTION用新的更新你的表PRIZEID

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

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

于 2013-08-16T19:52:53.353 回答