2013-08-16 27 views
0

我有兩個表,一個promotion table和一個prize tableSQL將行插入表中必須有2個不同的列,但也有一個不同的列

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子句中的所有列,所以它無濟於事。

在此先感謝!

+0

爲什麼獎品有多個獎勵ID? – weenoid

+0

促銷表中有重複的獎品。這是一個預先存在的表格,我試圖將促銷信息中的獎品信息分開,然後通過主鍵 - 外鍵關聯將這兩個表關聯起來。 – Mike

回答

0

您必須用新的值代替PRIZEID值。因爲它聽起來就像你現在對你的PROMOTION表重複

首先鮮明PRIZENAME S和COST s添加到您的新PRIZE表:

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

然後再加上新PRIZEID

更新 PROMOTION的餐桌
UPDATE PROMOTION R 
SET R.PRIZEID = 
    (SELECT P.PRIZEID 
    FROM PRIZE 
    WHERE P.PRIZENAME=R.PRIZENAME 
    AND P.COST=R.COST); 

然後,我想從那裏你可以安全地刪除你的PROMOTION的表中的列

+0

這工作完美。謝謝! – Mike

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 
; 
相關問題