2015-12-03 47 views
1

沿着插入来自select语句的值到表中我有一个名为ROLES角色IDROLEDESC作为列的表。 我试图从ROLES表得到最大角色ID并将其存储在另一个表中的硬编码值一起说“NEWROLEDESC”如何使用硬编码的值

新的表结构(即“DROLES”。): DIDDROLEDESC其中DROLEDESC是用硬编码值来填充和DID是填充了select语句的值:SELECT MAX(ROLEID)+1 as maxroleid FROM ROLES

我曾尝试:

insert into DROLES(DID) SELECT MAX(ROLEID)+1 FROM ROLES 

现在,上面插入DID中的最大ID,但是当我尝试

insert into DROLES(DID,DROLEDESC) 
values ((SELECT MAX(ROLEID)+1 FROM ROLES),'NEWROLEDESC') 

它不work.Ofcourse的SQL语法不正确。有没有办法实现它/正确的SQL语法?

注意:我只是写这个作为一个实验。我知道AUTO增量会做到这一点。除此之外的任何事情?

+4

'插入DROLES(DID,DROLEDESC)SELECT MAX(ROLEID)+1,'NEWROLEDESC'FROM ROLES'请注意并发查询可能导致的错误。重新创建'AUTO_INCREMENT'不是最好的选择。 – lad2025

+0

啊......只是我一直在寻找的东西。正确的SQL语法! :) 谢谢! 谢谢你的建议!只是问这是为了学习的目的! –

+0

@ lad2025,你真的很快:)如果你已经使用评论解决它,如何写在答案..哈哈,1评论^^ – Japongskie

回答

2

重新创建AUTO_INCREMENT(MySQL)/SEQUENCE/IDENTITY(SQL Server)不是最好的方法,你可能会得到不正确的值与concurnt查询!

INSERT ... SELECT语法是:

INSERT INTO DROLES(DID, DROLEDESC) 
SELECT MAX(ROLEID)+1, 'NEWROLEDESC' 
FROM ROLES; 

请记住,如果你插入多次DROLESROLES不chaning你会DID列得到相同的值。