我有两个表,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
。在这样做时,我只想选择那些在两列prizename
和cost
中具有唯一值的记录。之后我会从promotion
删除这些列。
现在我有以下sql语句
INSERT INTO prize(PRIZEID, COST, PRIZENAME)
SELECT r.PRIZEID, r.COST, r.PRIZENAME
FROM PROMOTION r;
但这会将所有记录插入prize table
。我意识到我可以在select中使用distinct关键字来选择cost
和prizename
的唯一实例,但在我的情况下,prizeid
将始终是唯一的,因为distinct
关键字适用于select子句中的所有列,它不会帮助。
提前致谢!
答案 0 :(得分:0)
您必须将PRIZEID
值替换为新值。因为听起来您目前在PROMOTION
表
首先将所有不同的PRIZENAME
和COST
添加到新的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
表
答案 1 :(得分:0)
这将获得基于prizename和费用的独特奖品,并获得该组的最低奖金。
INSERT INTO prize(PRIZEID, COST, PRIZENAME)
SELECT MIN(r.PRIZEID), r.COST, r.PRIZENAME
FROM PROMOTION r
GROUP BY r.COST, r.PRIZENAME
;