gpt4 book ai didi

SQL 连接和排除

转载 作者:行者123 更新时间:2023-12-04 14:03:03 25 4
gpt4 key购买 nike

假设在 T-SQL 中有这样的查询。

   SELECT *  
FROM Stock S
LEFT JOIN StockBarcode SB ON SB.StockID = S.StockID
AND SB.ShopID = @ShopID
AND SB.Inactive = 0
LEFT JOIN StockBarcode SB1 ON SB1.StockID = S.StockID
AND SB1.ShopID = 0
AND SB1.Inactive = 0
WHERE S.StockID = @StockID

我的理解是我可以这样重写查询

   SELECT * 
FROM Stock S
LEFT JOIN StockBarcode SB ON S.StockID = SB.StockID
AND SB.ShopID = @ShopID
LEFT JOIN StockBarcode SB1 ON S.StockID = SB1.StockID
AND SB1.ShopID = 0
WHERE S.StockID = @StockID
AND ISNULL(SB.Inactive, 0) = 0
AND ISNULL(SB1.Inactive, 0) = 0

...结果是一样的。 (如果我错了请纠正我)哪个是最佳查询,为什么?如果我使用另一个数据库引擎(例如 MySql),情况会有所不同吗?

提前感谢任何答案:-)

编辑:为了澄清,这里是整个查询,如果有帮助的话。

SELECT 
SSCLRU.SupplierCode,
S.[Description],
S.TaxRate AS GSTRate,
ISNULL(ISNULL(SB.PackPrice, SB1.PackPrice), S.RRP) AS Price,
ISNULL(SB.PackSize, SB1.PackSize) AS Quantity,
ISNULL(SB.SalePrice, SB1.SalePrice) AS SalePrice,
ISNULL(SB.SaleDateFrom, SB1.SaleDateFrom) AS SalePriceStartDate,
ISNULL(SB.SaleDateTo, SB1.SaleDateTo) AS SalePriceEndDate
FROM Stock S

LEFT JOIN StockSupplierCodePreferredLastReceivedUnique SSCLRU ON
S.StockID = SSCLRU.StockID

LEFT JOIN StockBarcode SB ON
S.StockID = SB.StockID AND
SB.ShopID = @ShopID AND
SB.Inactive = 0

LEFT JOIN StockBarcode SB1 ON
S.StockID = SB1.StockID AND
SB1.ShopID = 0 AND
SB1.Inactive = 0

WHERE S.StockID = @StockID

最佳答案

第一个更清晰,因为您不必担心 WHERE 中的不匹配行

但是,我可能会使用这个结构来完全分离连接和过滤条件

FROM
Stock S
LEFT JOIN
StockSupplierCodePreferredLastReceivedUnique SSCLRU ON S.StockID = SSCLRU.StockID

LEFT JOIN
(
SELECT StockID, ...
FROM StockBarcode
WHERE ShopID = @ShopID AND Inactive = 0
) SB ON S.StockID = SB.StockID

LEFT JOIN
(
SELECT StockID, ...
FROM StockBarcode
WHERE ShopID = 0 AND Inactive = 0
) SB1 ON S.StockID = SB1.StockID
WHERE
S.StockID = @StockID

派生表也可以插入 CTE(或 2)。

关于SQL 连接和排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com