2016-06-20 61 views
0

我想为我的项目使用SELECT INSERT;但是,需要填充插入的列之一对应于INSERT中的位置。我试过使用子查询(如下所示),只是在SELECT的FROM子句中使用表名 - 两者似乎都不起作用。选择插入索引?

我得到的输出始终是 “10001”,而不是我所期望的(即 “10001”, “10002”, “10003” 等)

任何帮助吗?

INSERT INTO table 
(
    Key2 
) 
SELECT 
(SELECT IF(CAST(MAX(t.Key2) as UNSIGNED) IS NULL, "10001", CAST(MAX(t.Key2) as UNSIGNED)+1) FROM (select * from table) t) 
FROM table2 
+0

我相信,在你的逻辑问题你正在使用一个聚合函数(max())。这将这些值限制为仅返回1个值。 – Mackers

+0

http://stackoverflow.com/questions/9631096/mysql-incrementing-value –

回答

0

如果我正确理解你的问题,尝试是这样的:

INSERT INTO TABLE (KEY2) 
SELECT A.KEY2 + B.MAX_VAL AS KEY2 FROM TABLE A 
JOIN (SELECT MAX(KEY2) AS MAX_VAL FROM TABLE) B 
ON 1 = 1 
+0

问题是它在插入之前执行SELECT - 并且它不会在插入之间再次选择。 因此,该值始终显示为NULL,因为这是尝试插入前的原始值。 –

+0

@JordanHarris afaik no sane RDBMS支持我只能猜测会被称为递归查询。我不确定其他人,但MySQL甚至不会让你从表上的触发器插入表中。 – Uueerdo

+0

插入选择将始终在插入之前选择。您能否提供一个示例起始数据集,以及您对最终数据集的看法? – Mackers

2

如果你想枚举密钥,然后使用变量:

INSERT INTO table (Key2) 
    SELECT COALESCE(maxkey, 0) + (@rn := @rn + 1) 
    FROM table2 CROSS JOIN 
     (SELECT MAX(t.key) maxkey, @rn := 0 FROM table) x ;