Sql server 在SQL Server联接中显示空值
我正在使用SQL Server。我有三张桌子:Sql server 在SQL Server联接中显示空值,sql-server,tsql,join,Sql Server,Tsql,Join,我正在使用SQL Server。我有三张桌子: 特布卢瑟 特布拉迪特 特伯伦 tblAudit有4列: nUserId,nID:这两列指向tblUser vFromValue,vToValue:这两列指向tblEnum 现在,我需要根据tbludit表中的id显示tblUser和tblEnum的实际值。 我编写的查询如下所示: SELECT A.aEventID, U.tName AS MakerChecker, U2.tName AS OnUser, VLE.tDisplayName AS F
SELECT A.aEventID,
U.tName AS MakerChecker,
U2.tName AS OnUser,
VLE.tDisplayName AS FromValue,
VLE2.tDisplayName AS ToValue,
A.dChangeTime AS Timestamp
FROM tblAudit A INNER JOIN tblUser U ON A.nUserId = U.aUserId
INNER JOIN tblUser U2 ON A.nID = U2.aUserId
INNER JOIN tblEnum VLE ON A.vFromValue = VLE.nIndex OR (A.vFromValue IS NULL)
INNER JOIN tblEnum VLE2 ON A.vToValue = VLE2.nIndex OR (A.vToValue IS NULL)
由于某些行的vFromValue和vToValue列的审核表中的值为null,因此这些值不是null,而是前一个值。
如何通过更改上述查询完整地显示空值?请帮助。如果我理解您的问题,请尝试对最后两行使用左连接(并删除或之后的条件)。由于
tblAudit.vFromValue
和tblAudit.vToValue
具有NULL
s,请尝试以下操作:
SELECT A.aEventID,
U.tName AS MakerChecker,
U2.tName AS OnUser,
VLE.tDisplayName AS FromValue,
VLE2.tDisplayName AS ToValue,
A.dChangeTime AS Timestamp
FROM
( SELECT aEventID, nUserId, nID, dChangeTime
, COALESCE(vFromValue, -9999) AS vFromValue --- some non-existent
, COALESCE(vToValue, -999) AS vToValue --- value
FROM tblAudit
) AS A
INNER JOIN tblUser U
ON A.nUserId = U.aUserId
INNER JOIN tblUser U2
ON A.nID = U2.aUserId
LEFT JOIN tblEnum VLE
ON A.vFromValue = VLE.nIndex
LEFT JOIN tblEnum VLE2
ON A.vToValue = VLE2.nIndex
或者这个:
SELECT A.aEventID,
U.tName AS MakerChecker,
U2.tName AS OnUser,
( SELECT VLE.tDisplayName
FROM tblEnum VLE
WHERE A.vFromValue = VLE.nIndex
) AS FromValue,
( SELECT VLE2.tDisplayName
FROM tblEnum VLE2
WHERE A.vToValue = VLE.nIndex
) AS ToValue,
A.dChangeTime AS Timestamp
FROM tblAudit AS A
INNER JOIN tblUser U
ON A.nUserId = U.aUserId
INNER JOIN tblUser U2
ON A.nID = U2.aUserId
已经做了:)没有帮助。然而,我尝试了其他解决问题的办法,但我认为这不是一个干净的解决办法,而是达到了目的。将其作为答案发布。如果有人找到更好的解决方案,请发布。谢谢