我使用以下语句从一个以“|”分隔的字段中从表中提取唯一值。它看起来像这样:“40 | 180 | 408 | 360 | 40 | 1s66 | 80 | 59”我的问题是我似乎无法获得此声明以允许我拉出主键字段,id并分配它从字段字符串中的每个唯一项目,以便我以后可以实际使用它。理想情况下,应从“40 | 180 | 408 | 360 | 40 | 1s66 | 80 | 59”为此临时表上的每个值分配ID#27。任何人都可以帮助我使用以下语句来允许我从表BlogImageBundle插入并为其分配字段ID吗?
CREATE TEMPORARY TABLE test (postId INT(11), val CHAR(255));
SET @S1 = CONCAT("INSERT INTO test (val) VALUES ('",REPLACE((SELECT GROUP_CONCAT( DISTINCT `images`)
AS data FROM `BlogImageBundle`), "|", "'),('"),"');");
PREPARE stmt1 FROM @s1;
EXECUTE stmt1;
SELECT DISTINCT(val) FROM test;
答案 0 :(得分:1)
这只适用于一条记录。您需要添加另一个while循环来跟踪rowcount以处理多个记录:http://sqlfiddle.com/#!6/d62f7/1
CREATE TABLE #Test
(
ID INT,
Initial VARCHAR(MAX)
)
CREATE TABLE #Test2
(
ID INT,
Final VARCHAR(MAX)
)
INSERT INTO #Test VALUES(27,'40|180|408|360|40|1s66|80|59')
DECLARE @String VARCHAR(MAX)
SET @string = (SELECT Initial FROM #Test)
DECLARE @StringInput VARCHAR(MAX)
SET @stringInput = (SELECT Initial FROM #Test)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,ISNULL(NULLIF(CHARINDEX('|', @StringInput) - 1, -1),LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,ISNULL(NULLIF(CHARINDEX('|', @StringInput), 0),LEN(@StringInput)) + 1, LEN(@StringInput))
INSERT INTO #Test2 (ID, Final)
SELECT ID,@string FROM #Test
END