我在表格中有三列PRODUCTID
,PRODUCTNAME
,PRODUCTCODE
。
我希望插入一个新产品,从其他列
PRODUCTID
如何获取PRODUCTNAME
的前两个字母和PRODUCTCODE
的后四个数字并将其填入PRODUCTID
?
我不希望在表中复制产品,如果尝试,我希望表保持不变。默认PRODUCTID
为DEFAULT
。
我到目前为止得到了:
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 :(得分:0)
首先,我建议将PRODUCTID
列设置为唯一。这将阻止任何产品具有相同的值。如果您的默认PRODUCTID是“默认”,那么您可能需要在更新ID后执行此操作。
您的UPDATE
声明没有问题,除了WHERE
条款:
WHERE `PRODUCTID`= "DEFALT" AND `PRODUCTID`!=`PRODUCTID`
"DEFAULT"
和
`PRODUCTID`!=`PRODUCTID`
永远不会成真。
WHERE `PRODUCTID`= "DEFAULT"
应该够了。
以上内容将修复现有产品的ID不正确。现在您应该更改插入内容,以便为每个新产品正确设置PRODUCTID
。您只需添加更新语句中使用的CONCAT
即可完成此操作:
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)));