我有這樣的查詢。它從表用戶返回TableA和UserName中的ColA和ColB。然後它將TableB中的幾個字段顯示爲結果的附加列。它的工作原理,但有沒有比使用這些多個LEFT JOINS更好的方法?T-SQL刪除多個LEFT JOIN
SELECT a.COlA, a.ColB, u.UserName,
b1.Value,
b2.Value,
b3.Value,
b4.Value,
FROM TableA a JOIN Users u ON a.UserId = u.UserId
LEFT JOIN TableB b1 ON a.EventId = b1.EventId AND b1.Code = 5
LEFT JOIN TableB b2 ON a.EventId = b2.EventId AND b2.Code = 15
LEFT JOIN TableB b3 ON a.EventId = b3.EventId AND b3.Code = 18
LEFT JOIN TableB b4 ON a.EventId = b4.EventId AND b4.Code = 40
WHERE (a.UserId = 3) ORDER BY u.UserName ASC
表B的樣子:
Id | EventId | Code | Value
----------------------------
1 | 1 | 5 | textA
2 | 1 | 15 | textB
3 | 1 | 18 | textC
有時代碼丟失,但每個事件有沒有重複的代碼(所以每個LEFT JOIN是在同一個結果記錄只是一個細胞)。
是否行得通?它是否快得可以接受?如果是和是,爲什麼要改變它? –
多個左連接有什麼問題?如果你的查詢在可接受的時間內返回正確的結果,那麼就把它放在一邊,否則你花時間在沒有價值的東西上 – Pondlife
它看起來有點'哈克' ,尤其是如果我們使用了大量的這些LEFT JOINs,我希望有一種機制可以替代它們。 – yosh