带有插入语句的 Where 子句

Posted

技术标签:

【中文标题】带有插入语句的 Where 子句【英文标题】:Where clause with insert statement 【发布时间】: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 名?还有你在插入什么?只是身份证?如果不是,您的表结构是什么? 【参考方案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】:

有几个问题

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

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

    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 插入)。

以上是关于带有插入语句的 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 使用 WHERE 子句插入 MS Access

如何使用带有 WITH 子句的 INSERT 语句?

即使插入了列,“WHERE”子句中的 SQL 未知列

我可以在 MERGE 语句中对目标应用 WHERE 子句吗?

在 WHERE 子句中使用函数编写 SQL SELECT 语句是不是有 Django 等效项?

Access SQL - 插入带有空字段的记录?