SQL - ISNULL记录值

时间:2010-03-05 22:40:54

标签: sql

我有一个SQL语句,如果存在连接记录,我需要显示另一个表中的值。为了尝试这个,我正在使用ISNULL。作为演示,这是一个示例查询:

SELECT
 FirstName,
 LastName,
 ISNULL(select top 1 birthdate from BirthRecords where [SSN]=p.SSN, false) as HasRecord
FROM
 Person p

请注意,这是一个小片段。我知道有更好的方法来执行此特定查询。但是,我不能在FROM子句中进行外连接。因此,我正在尝试进行内联语句。我认为ISNULL是正确的做法。有人可以解释我应该怎么做吗?

谢谢,

4 个答案:

答案 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)

您的问题不完整。你至少应该指定:

  • 你使用什么DBMS(我猜MS SQL Server,因为ISNULL)
  • 什么/不起作用

那就是说,我认为你不能像这样使用ISNULL。根据文档,替换和原始列必须是类型兼容的。所以你不能使用“假”作为替代,它必须是一个日期(如生日)。

答案 3 :(得分:0)

从性能和可读性的角度来看,做JOIN是最好的选择。

为什么你不能加入?

另一种选择是创建一个FUNCTION并调用它。像GET_BIRTHDATE(p.SSN)之类的东西,它将返回一个缩放器值null或日期。这显然是一个性能问题,因为函数将在每一行调用...所以JOIN仍然会更好。