当前位置: 首页 > 面试题库 >

具有相同条件的SELECT和UPDATE查询中的SQL Server不匹配行数

程项禹
2023-03-14
问题内容

我正在尝试匹配更新并选择条件相同的查询计数。但是行数却有很大的不同。

更新查询:

 UPDATE  MKP set MKP.Quantity =  MKP.Quantity + LQD.Quantity, ModifiedDate = GETDATE()
         FROM IM_MarketPlace MKP 
              INNER JOIN IM_ChannelListings CL ON MKP.ListingID = CL.ListingID 
              INNER JOIN @ListingQuantityData LQD ON LQD.ChanelListingID = RTRIM(LTRIM((CL.ChannelListingID)))  and LQD.SalesChannelID = CL.ChannelID
              Left outer join IM_ListingVariations LV on LV.ListingCode = RTRIM(LTRIM((LQD.VariationSKU))) and  MKP.ListingVariationID = LV.ID and CL.ListingID=LV.ListingID
         WHERE MKP.IsActive =1 and MKP.IsDeleted=0 and CL.IsActive =1 and CL.IsDeleted=0 
               AND (LQD.VariationSKU is null OR (LQD.VariationSKU = LV.ListingCode and lv.ID = MKP.ListingVariationID))

选择查询

select count(mkp.ListingID) FROM IM_MarketPlace MKP 
              INNER JOIN IM_ChannelListings CL ON MKP.ListingID = CL.ListingID 
              INNER JOIN @ListingQuantityData LQD ON LQD.ChanelListingID = RTRIM(LTRIM((CL.ChannelListingID)))  and LQD.SalesChannelID = CL.ChannelID
              Left outer join IM_ListingVariations LV on LV.ListingCode = RTRIM(LTRIM((LQD.VariationSKU))) and  MKP.ListingVariationID = LV.ID and CL.ListingID=LV.ListingID
         WHERE MKP.IsActive =1 and MKP.IsDeleted=0 and CL.IsActive =1 and CL.IsDeleted=0 
               AND (LQD.VariationSKU is null OR (LQD.VariationSKU = LV.ListingCode and lv.ID = MKP.ListingVariationID))

请帮我解决这个问题。

也请让我知道@@ rowcount将如何用于更新查询。


问题答案:

如果联接中涉及的至少两个表之间存在一对多关系,则会发生这种情况。

SELECT会统计所有行,包括那些由加盟倍增,。该UPDATE会仅计算唯一行IM_MarketPlace受影响UPDATE

在存在一对多关系的地方,不能确定连接到特定行的“许多”行中的哪一行IM_MarketPlace被用作该行的更新中的源。



 类似资料:
  • 问题内容: 我有一个表创建与: 我用这个插入数据: 当我从表中选择以下内容时: 这将返回2行 为什么会这样呢?为什么即使查询指定值仅是1,但没有空格,它也返回最后带有空格的版本? 问题答案: 有趣的是,如果您使用LIKE,则可以工作: 编辑: 经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条

  • 使用JDBC驱动程序,我如何使用来自不同查询的多个结果集,而不不断地打开和关闭连接,因为我正在提取所需的w.e并将其传递给另一个方法。每次打开新的conn、语句和结果集时 我试图在一个方法中使用多个结果集,但它一直抛出异常,称结果集已关闭。我没有太多的SqlServver经验,所以任何指导都会有所帮助:-)

  • 问题内容: 将SELECT查询放在UPDATE查询的WHERE子句中时出现错误。 我的查询是这样的: AND错误将显示如下: “无法在FROM子句中指定目标表’m’进行更新” 问题答案: 实际上,您可以通过将其包装在子查询中来更新它(从而为结果创建临时表) 或使用 JOIN

  • 问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组

  • 问题内容: 我需要检查(从同一张表)基于日期时间的两个事件之间是否存在关联。 一组数据将包含某些事件的结束日期时间,另一组数据将包含其他事件的开始日期时间。 如果第一个事件在第二个事件之前完成,那么我想将它们链接起来。 到目前为止,我有: 然后我加入他们: 然后,可以基于我的validation_check字段运行带有SELECT嵌套的UPDATE查询吗? 问题答案: 您实际上可以通过以下两种方式