两个 SQL 服务器查询之间的区别?

Difference between two SQL Server queries?

我想知道两个 SQL 服务器查询之间的区别?

表格:

我想做的是加入上面的 tables 并应用过滤器。其中一个过滤器基于另一个 table.

查询#1

UPDATE STORE_ITEM
SET user_bit_5 = '1'
FROM STORE_ITEM
     INNER JOIN tag_demand ON STORE_ITEM.item_id = tag_demand.item_id
                          AND STORE_ITEM.store_nbr = tag_demand.store_nbr
WHERE tag_demand.print_dt = '2022-04-11'
  AND tag_demand.STORE_NBR IN (SELECT store_nbr FROM store WHERE division_id = 'XYZ')
  AND user_bit_5 = '0';

查询#2

UPDATE STORE_ITEM
SET user_bit_5 = '1'
FROM STORE_ITEM
     INNER JOIN tag_demand ON STORE_ITEM.item_id = tag_demand.item_id
                          AND STORE_ITEM.store_nbr = tag_demand.store_nbr
                          AND tag_demand.print_dt = '2022-04-11'
                          AND tag_demand.STORE_NBR IN (SELECT store_nbr FROM store WHERE division_id = 'XYZ')
WHERE user_bit_5 = '0';

第一个查询在连接上有更多条件,而第二个查询在 where 子句上有更多条件。

您向我们展示的特定查询没有差异。 SQL 服务器的查询规划器可能会使用类似的操作来满足两者。

不过,当与 LEFT JOIN 和 SELECT not UPDATE 一起使用时,您的第二个查询模式仍然很常见。对于 LEFT JOIN,像您的第二个查询这样的查询总是 return 来自 STORE_ITEM 的至少一行,即使它没有找到来自 tag_demand.

的匹配行

(如果您在第二个查询中使用 LEFT JOIN 而不是普通的 INNER JOIN,您将更新 STORE_ITEM table 中的所有行。)