2010-03-05 53 views
0

我有一个SQL语句,如果存在连接记录,我需要显示另一个表中的值。为了尝试这个,我使用ISNULL。作为演示,以下是一个示例查询: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

你对这个查询运行什么数据库? – Leslie 2010-03-05 22:43:41

+0

当你说“更好的方式”时,你到底在寻找什么? – Cory 2010-03-05 22:43:58

+0

对于什么数据库? 'ISNULL'是SQL Server ... – 2010-03-05 22:44:01

回答

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

使用左外连接,如果它存在返回的生日,否则返回null:

SELECT 
    FirstName, 
    LastName, 
    birthdate 
FROM Person AS p 
LEFT JOIN BirthRecords AS b ON p.SSN = b.SSN 
0

做一个JOIN是真正从性能和可读性的角度你最好的选择。

为什么你不能加入?

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

1

您的问题不完整。你至少应该注明:

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

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