带有插入语句的 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 表中,这会起作用吗? 不。对不起,我真的不明白你在这里想做什么。您能否使用表Item
和EntityAttributeValue
的示例数据来编辑您的问题以澄清。【参考方案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
我可以在 MERGE 语句中对目标应用 WHERE 子句吗?