我有一个SQL语句,如果存在连接记录,我需要显示另一个表中的值。为了尝试这个,我正在使用ISNULL。作为演示,这是一个示例查询:
SELECT
FirstName,
LastName,
ISNULL(select top 1 birthdate from BirthRecords where [SSN]=p.SSN, false) as HasRecord
FROM
Person p
请注意,这是一个小片段。我知道有更好的方法来执行此特定查询。但是,我不能在FROM子句中进行外连接。因此,我正在尝试进行内联语句。我认为ISNULL是正确的做法。有人可以解释我应该怎么做吗?
谢谢,
答案 0 :(得分:2)
试试这个,看看它是否适用于你。
SELECT
FirstName,
LastName,
CASE when R.BirthDate IS NULL THEN FALSE
ELSE TRUE
END as HasRecord
FROM
Person p
left join BirthRecords R on p.SSN = R.SSN
答案 1 :(得分:1)
使用左外连接返回生日(如果存在),否则为null:
SELECT
FirstName,
LastName,
birthdate
FROM Person AS p
LEFT JOIN BirthRecords AS b ON p.SSN = b.SSN
答案 2 :(得分:1)
您的问题不完整。你至少应该指定:
那就是说,我认为你不能像这样使用ISNULL。根据文档,替换和原始列必须是类型兼容的。所以你不能使用“假”作为替代,它必须是一个日期(如生日)。
答案 3 :(得分:0)
从性能和可读性的角度来看,做JOIN是最好的选择。
为什么你不能加入?
另一种选择是创建一个FUNCTION并调用它。像GET_BIRTHDATE(p.SSN)之类的东西,它将返回一个缩放器值null或日期。这显然是一个性能问题,因为函数将在每一行调用...所以JOIN仍然会更好。