将值插入到同一表中进行插入

时间:2019-08-19 06:35:16

标签: sql sql-server sql-server-2012 sql-insert

我有一个表[name] Application_Form_Controls_Management,我想在其中插入19列的值,其中3列(App_Form_NameApp_Form_Function_IDRight_ID )我想在同一张表上添加一条select语句。

我要添加到这3列的值是:

select App_Form_Name,App_Form_Function_ID,Right_ID
from Application_Form_Controls_Management 
where App_Form_Name IN (Select Application_Form_Name From FormNameGridNameTempTable)
group by App_Form_Name,App_Form_Function_ID,Right_ID

此select语句将返回值(以一对为例):

App_Form_Name      | App_Form_Function_ID    | Right_ID
formContactNewEdit | 1                       | 0
formContactNewEdit | 1                       | 1
formContactNewEdit | 2                       | 1

PS:此问题不是this question的重复,因为他的问题是通过在要插入的每一列中写入一个select来解决的,但是在我的情况下,这将返回错误的值,因为我要添加的列是“相关的”,因此,如果我执行相同的操作,则意味着我将得到与App_Form_Function_ID列关联的Right_IDApp_Form_Name值错误,例如,我可能会看到此行添加到我的表中:

App_Form_Name      | App_Function_ID     | Right_ID
formContactNewEdit | 3                   | 1

App_Function_ID的值3和Right_ID的值1对于“ formContactNewEdit”错误时

更新,由于有人告诉我我的问题不清楚,因此我将尝试以另一种方式提出该问题:

我有一个表Application_Form_Controls_Management,我想在其中应用一个insert into语句。我的表有19列,其中3列中的值将插入select语句,其余手动(通过手动,我是指我将用手写的方式输入它们的值)。

通常会这样:

Insert Into Application_Form_Controls_Management (column1, App_Form_Name,App_Form_Function_ID,Right_ID,column5, _)
Values('manual value',select statement,select statement,select statement,'the rest are manual values')

但是,如果我那样做的话,我将得到错误的值(在P.S段落中进行了说明),因此似乎只需要一次选择就可以插入这3列,但是我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

这行不通吗?

insert ...
select t1.App_Form_Name, t1.App_Form_Function_ID, t1.Right_ID
from
(
select distinct App_Form_Name,App_Form_Function_ID,Right_ID
from Application_Form_Controls_Management 
where App_Form_Name IN (Select Application_Form_Name From FormNameGridNameTempTable)
) as t1

请注意,除了分组实际上并没有添加任何内容外,我没有其他原因使用DISTINCT而不是GROUP。

答案 1 :(得分:1)

不要使用VALUES,而要在其他列之间添加要插入的文字值的SELECT:

insert Into Application_Form_Controls_Management 
(column1, App_Form_Name,App_Form_Function_ID,Right_ID,column5, _)
select 'manual value',App_Form_Name,App_Form_Function_ID,Right_ID,'the rest are manual values'
from Application_Form_Controls_Management 
where App_Form_Name IN (Select Application_Form_Name From FormNameGridNameTempTable)
group by App_Form_Name,App_Form_Function_ID,Right_ID