【问题标题】:SQL Server INSERT new recordsSQL Server 插入新记录
【发布时间】:2015-12-17 14:01:57
【问题描述】:

在发布之前,我也阅读了this。但我认为可能是我的问题略有不同。

我有一个场景,我的表结构如下:

my_table

my_id | what_I_have | what_I_can_do

我没有主键,因为该表是一个查找表(不是基本的)。我想要的只是获取my_id 的一组值,它基于what_I_havewhat_I_can_do 的某些值。一旦我得到一个结果集(带有my_d),我想为结果集中的每个my_id 插入新记录到my_table 中,并为其他列提供附加信息。

例如

01001 | boxes | delivery  | (existing)
01002 | boxes | delivery  | (existing)
01001 | boxes | unpacking | (new)
01002 | boxes | unpacking | (new)

我想过做以下事情:

INSERT INTO my_table(my_id, what_I_have, what_I_can_do, my_customer_company)
    SELECT 
        my_id, 'boxes', 'unpacking' 
    FROM 
        my_table (NOLOCK)
    WHERE 
        my_id IN (SELECT b.my_id FROM my_table b(NOLOCK) 
                  WHERE b.what_I_have = 'boxes' 
                    AND b.what_I_can_do = 'delivery')

我知道可能有一种方法可以使用INNER JOIN 并在不“嵌套”的情况下顺利完成这项工作。但这会起作用还是我在这里遗漏了什么?

韩国,

【问题讨论】:

  • “我没有主键,因为该表是一个查找表”——这个逻辑有缺陷。
  • 不确定为什么需要加入?
  • 只需将子查询 where 子句放在另一个查询 where 子句中
  • 设置Bad Habits to kick - putting NOLOCK everywhere - 不推荐在任何地方使用它 - 恰恰相反!
  • 每个表都应该有一个主键 - 你还打算如何识别每一行?

标签: sql insert sql-server-2012


【解决方案1】:

我认为您根本不需要嵌套或 join

INSERT INTO my_table(my_id, what_I_have, what_I_can_do, my_customer_company)
    SELECT my_id, 'boxes', 'unpacking'
    FROM my_table
    WHERE what_I_have = 'boxes' AND what_I_can_do = 'delivery';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多