gpt4 book ai didi

sql - 工作 SQL Server 2005 查询优化

转载 作者:行者123 更新时间:2023-12-04 22:33:58 26 4
gpt4 key购买 nike

我有两个表SellPurchase。我的查询给了我想要的结果,我很关心它的性能,所以请指导我是否可以更好。我的表格是:
表卖

UserId  | ProductId    |  ProductName   | ProductPrice
1 | p_101 | Cycle | 500
1 | p_121 | Car | 500000
2 | p_111 | Cycle | 5000

表购买

UserId  | ProductId    |  ProductName   | ProductPrice
1 | p_109 | CellPhone | 150
2 | p_121 | Car | 500000
3 | p_111 | Book | 15

期望的输出表

Type    | ProductId    |  ProductName   | ProductPrice
Sell | p_101 | Cycle | 500
Sell | p_121 | Car | 500000
Purchase| p_109 | CellPhone | 150

工作查询:

SELECT type, P1.ProductId, P1.ProductName, P1.ProductPrice
FROM
(
SELECT s.UserId, 'Sell' as type, s.ProductId, s.ProductName, s.ProductPrice FROM [Sell] s
UNION
SELECT p.userid, 'Purchase' as type, p.ProductId, p.ProductName, p.ProductPrice FROM [Purchase] p
) as P1
WHERE userid=1

最佳答案

更好的设计是合并两个表并有一个 transaction_type 列,该列将以“Purchase”或“Sell”作为值。如果这样做,您就不必执行 UNION 或 UNION ALL。

根据当前的设计,这是一种获取记录的简单且快速的方法。请注意,我使用的 UNION ALL 比 UNION 更快,因为 UNION 使用 DISTINCT 来唯一记录,我认为在您的情况下不适用。如果您提供有关索引和执行计划的详细信息,我可以看看是否有更好的方法。

SELECT s.userid,
'Sell' as type,
s.ProductId,
s.ProductName,
s.ProductPrice
FROM Sell s
WHERE UserId = 1
UNION ALL
SELECT p.userid,
'Purchase' as type,
p.ProductId,
p.ProductName,
p.ProductPrice
FROM Purchase P
WHERE UserId = 1

关于sql - 工作 SQL Server 2005 查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20742307/

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