【发布时间】:2019-10-14 13:53:24
【问题描述】:
我有以下表格。
终端:
出口:
vpos_out:
当我执行以下查询时,一切看起来都很好:
SELECT TOP 2
o.id,
mt.id AS [activated_device],
vo.id AS [outlet]
FROM
terminalmt WITH (NOLOCK)
LEFT JOIN
outlet o WITH (NOLOCK) ON o.id = mt.outlet_id AND mt.status = 0
LEFT JOIN
vpos_out vo WITH (NOLOCK) ON vo.wallet_id = o.wallet_id AND vo.status = 1
WHERE
o.wallet_id = 356988
我得到以下结果:
问题是当我将 mt.status 值更改为 12 (显然不存在的状态。
在这种情况下,我没有得到任何结果。
我想得到以下结果
有什么想法吗?
【问题讨论】:
-
您的 where 子句正在将您的左连接变为内连接。另外,小心将 NOLOCK 溅到各处。这不是一个没有任何副作用的神奇快速按钮。 blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere
-
你为什么要加入 wallet_id?它对于连接中的任何表都不是唯一的。
标签: sql-server join select