在SQL Server中显示NULL值加入
问题描述:
我正在使用SQL Server。我有3个表:在SQL Server中显示NULL值加入
- tblUser
- tblAudit
- tblEnum
的tblAudit得到了4列:
nUserId,的NID:这两列指向tblUser
vFromValue,vToValue:这两列指向tblEnum
现在,我需要根据tblAudit表中存在的ID显示来自tblUser和tblEnum的实际值。 我写的查询看起来是这样的:
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,但以前的值。 如何通过更改上述查询来完整显示空值?请帮忙。
答
由于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
答
如果我理解你的问题 - 尝试对最后两行使用LEFT JOIN(并在OR之后删除条件)。
+0
做了吧:)没有帮助。然而,已经尝试了其他方法来解决问题,但我认为它不是一个干净的解决方案,而是为了达到目的。发布它作为答案。如果有人遇到更好的解决方案,请将其发布。谢谢。 –
伟人!帮助完善我的解决方案。解决。 –