我有这样的查询。它从表用户返回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