【问题标题】:Insert Into with value select from the same table从同一个表中插入值选择
【发布时间】:2019-08-19 06:35:16
【问题描述】:

我有一个表 [named] Application_Form_Controls_Management 我想在其中插入 19 列的值,其中 3 列 (App_Form_Name,App_Form_Function_ID&Right_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

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

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

P.S:这个问题不是 this question 的重复,因为他的问题是通过在他想要插入的每一列中写一个 select 来解决的,但在我的情况下,这会返回错误的值,因为我想要的列add 是“相关的”,所以如果我这样做意味着我会得到错误的 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 列,但我不知道如何。

【问题讨论】:

  • @JorgeCampos 不,这不是因为在他的问题中,它可以通过在他要插入的每一列中写入 select 来解决,但在我的情况下,这 3 列是“相关的”,所以我可以不要为每一列写一个select,因为结果将完全不同,因为它将在列中插入值:App_Form_Function_IDRight_ID 到不应该添加到其中的App_Form_Name。跨度>
  • 问题不是很清楚。
  • @mkRabbani 我更新了我的问题并以另一种方式提出了问题

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


【解决方案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

【讨论】:

    【解决方案2】:

    这不行吗?

    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 只是因为分组并没有真正添加任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多