2014-02-24 135 views
-1

我在表格中有三列PRODUCTID,PRODUCTNAME,PRODUCTCODE。 我要插入一個新產品從創建其他列將兩個不同字符串的部分合併爲新字符串

如何採取PRODUCTNAME的前兩個字母和最後四個數字PRODUCTCODE,並將其填充到PRODUCTIDPRODUCTID

我不希望產品在表內複製,如果嘗試,我希望表保持不變。默認PRODUCTIDDEFAULT

我有這麼遠:

INSERT INTO `v1_products` (`PRODUCTNAME`, `PRODUCTNUMBER`) VALUES ("EXAMPLE", "EXAMPLE4444"); 

UPDATE `v1_products` 

SET `PRODUCTID`=(SELECT CONCAT(
    (SELECT LEFT(`PRODUCTNAME`,2)) , (SELECT RIGHT(`PRODUCTNUMBER`,4)))) 

WHERE `PRODUCTID`= "DEFALT" AND `PRODUCTID`!=`PRODUCTID` 

LIMIT 1 
+0

究竟正在發生,您可以通過簡單地增加你的更新語句中使用的CONCAT做到這一點?你試圖用這個過濾器完成什麼?WHERE PRODUCTID =「DEFALT」和PRODUCTID!= PRODUCTID? –

+0

你想做什麼,'INSERT'或'UPDATE'? ''PRODUCTID'!='PRODUCTID''沒有意義,因爲只有一個表被引用,所以'PRODUCTID'總是等於'PRODUCTID' –

回答

0

首先,我會建議設置PRODUCTID列是唯一的。這將阻止任何產品具有相同的值。如果您的默認PRODUCTID爲「默認」,那麼您可能需要在更新ID後執行此操作。

UPDATE說法是,除了從WHERE條款罰款:

WHERE `PRODUCTID`= "DEFALT" AND `PRODUCTID`!=`PRODUCTID` 

有一個在"DEFAULT"一個錯字和

`PRODUCTID`!=`PRODUCTID` 

永遠不會爲真。

WHERE `PRODUCTID`= "DEFAULT" 

應該足夠了。

以上將修復不正確的ID的現有產品。現在您應該更改插入,以便爲每個新產品正確設置PRODUCTID

INSERT INTO `v1_products` (`PRODUCTID`, `PRODUCTNAME`, `PRODUCTNUMBER`) 
VALUES (
    CONCAT(
     LEFT("EXAMPLE",2), 
     RIGHT("EXAMPLE4444",4)), 
    "EXAMPLE", 
    "EXAMPLE4444"); 

在評論中只有一次設置的列值的示例從討論:

INSERT INTO v1_products (PRODUCTNAME, PRODUCTNUMBER,PRODUCTID) 
VALUES ( 
    "EXAMPLE", 
    "EXAMPLE4444", 
    CONCAT(LEFT(PRODUCTNAME,2), RIGHT(PRODUCTNUMBER,4))); 
+0

我已經創建了UNIQUE列,並且在第二次輸入產品時出錯輝煌)。然而,具有DEFAULT值的記錄被輸入到表中(我不希望發生這種情況)。請幫助 – jbw

+0

您的意思是,如果您嘗試輸入具有重複產品ID的產品,則會使用'DEFAULT'創建一個產品?這不應該是這樣。你的插入是什麼樣的? – Jim

+0

我的INSERT顯示在問題中。我相信,因爲我的INSERT語句首先完成,它創建了默認的記錄,當我真正想要的是創建一個完整的計算產品代碼的記錄。希望這是有道理的。 – jbw

相關問題