带有insert语句的Where子句

时间:2010-09-27 08:19:11

标签: sql sql-server

是否可以将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列,而Other表是包含ID的Item表。所以加入就是这样的方式Item.ID = EntityAttributeValue.EntityID。现在,我想将Item表中的批量ItemID值插入到EntityAttributeValue表中,其中values ='10KT Gold'。

请告诉我。

2 个答案:

答案 0 :(得分:2)

这是你需要的吗?

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

答案 1 :(得分:1)

有几个问题

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

  2. 在列名前面添加表名,以明确其中的内容。

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

  4. [编辑]此查询应该有效:

    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中已有的项目。