我希望這里有人可以幫助我。我收到了這個需要很長時間才能運行的查詢(超過 30 分鐘)。我一直在嘗試重寫查詢,但到目前為止沒有運氣。我發布了一個查詢示例,以便您了解我正在嘗試做什么。
表 1 有 2000 條記錄。表 2 有 2000000 條記錄。
表 2 可能不包含它試圖查找的記錄。因此不能使用 CROSS APPLY 或 INNER JOIN。我認為這可以通過 LEFT JOIN 來解決,但我一直無法找到重新撰寫它的方法。
SELECT
ID, A, B,
CASE WHEN c IS NULL then
(SELECT max(distinct c) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
C
END as C,
CASE WHEN d IS NULL then
(SELECT max(distinct d) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
D
END as D,
CASE WHEN e IS NULL then
(SELECT max(distinct e) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
e
END as e,
f, g, h, i
FROM TABLE1 tbl1
除了運行 'select max' 查詢 3 次,有沒有辦法只加入一次表,這樣“相同”的查詢就不會運行 3 次?Max 的原因是 Table2 可能包含多個具有相同 Id 的記錄。在這種情況下,將 Id 視為具有多個訂單行編號的 Order_Id。希望這是有道理的。
uj5u.com熱心網友回復:
看起來您的查詢應該歸結為以下內容,這對您有用嗎并且性能更好?
select
t1.ID, t1.A, t1.B,
IsNull(t1.c, t2.c) C,
IsNull(t1.d, t2.d) D,
IsNull(t1.e, t2.e) E,
t1.f, t1.g, t1.h, t1.i
from TABLE1 t1
outer apply (
select Max(c) c, Max(d) d, Max(e) e
from TABLE2 t2
where t2.Id = t1.Id
)t2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374183.html
標籤:sql sql-server 查询语句 sql性能
上一篇:TSQL資料透視表行到列
