【问题标题】:Where clause with insert statement带有插入语句的 Where 子句
【发布时间】:2010-09-27 08:19:10
【问题描述】:

是否可以将 where 子句与 insert 语句一起使用。在我的场景中,我没有得到如何使用更新查询,因为子查询返回多个值。 我的查询是这样的。

INSERT EntityAttributeValue
       (
              EntityID
       )
SELECT ID
FROM   (SELECT ID
       FROM    (SELECT  ID,
                        ROW_NUMBER() over(ORDER BY ID) Row
               FROM     Item
               )
               x
       WHERE   Row BETWEEN 1 AND     400
       )
       x
WHERE  Value='10KT Gold'

我在这里要做的是,我在 EntityAttributeValue 表中有 EntityID 和 Value 列,而另一个表是包含 ID 的 Item 表。所以以这种方式加入 Item.ID = EntityAttributeValue.EntityID。现在,我想将 Item 表中的批量 ItemID 值插入到 values = '10KT Gold' 的 EntityAttributeValue 表中。

请告诉我。

【问题讨论】:

  • 这个查询应该做什么?您有 WHERE Value='10KT Gold',但 Value 未作为派生表中的列返回。
  • 您可能需要一个 IF...ELSE... 语句
  • 嗨,史密斯,我在 EntityAttributeValue 表中有值列,所以我正在尝试将 Item 表中的“x”行插入到满足该值条件的 EntityAttributeValue 表中。
  • 值不返回任何新列
  • 您想要满足条件的前 400 名,还是希望先找到前 400 名,然后排除不满足条件的前 400 名?还有你在插入什么?只是身份证?如果不是,您的表结构是什么?

标签: sql sql-server


【解决方案1】:

这是你需要的吗?

INSERT EntityAttributeValue
       (
              EntityID
       )
SELECT ID
FROM   (SELECT  ID,
                ROW_NUMBER() over(ORDER BY ID) Row
       FROM     Item
       WHERE    Value='10KT Gold'
       )
       x
WHERE  Row BETWEEN 1 AND    400

【讨论】:

  • 我的值列在 EntityAttributeValue 表中,这会起作用吗?
  • 不。对不起,我真的不明白你在这里想做什么。您能否使用表ItemEntityAttributeValue 的示例数据来编辑您的问题以澄清。
【解决方案2】:

有几个问题

  1. 您使用x 两次作为表名。即使它有效,它也会让任何人感到困惑。每次都使用新名称。

  2. 在列名之前添加表名,以明确来自哪里。

  3. value 来自哪里?它不在您执行的任何查询的结果集中。

[编辑] 这个查询应该可以工作:

INSERT EntityAttributeValue
   (
          EntityID
   )
SELECT x2.ID
FROM   (SELECT x1.ID
   FROM    (SELECT  i.ID,
                    ROW_NUMBER() over(ORDER BY i.ID) Row
           FROM     Item i
           )
           x1
   WHERE   Row BETWEEN 1 AND     400
   )
   x2
   join EntityAttributeValue eav on x2.ID = eav.EntityID
WHERE  eav.Value='10KT Gold'

但结果可能不是您想要的,因为它只会选择已经在 EntityAttributeValue 中的项目。

【讨论】:

  • value 列在 EntityAttributeValue 表中,作为在 EntityAttributeValue 表中插入值的条件。
  • 在这种情况下,您必须在查询的FROM 部分中提及EntityAttributeValue。而且您必须将此表与Item 表连接起来,以确保每个ID 只获得一个INSERT(而不是N*M 插入)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
相关资源
最近更新 更多