两个 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 中的所有行。)
我想知道两个 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 中的所有行。)