2014-02-24 77 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

相关问题