2010-03-05 80 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。根據文檔,替換和原始列必須是類型兼容的。所以你不能使用「假」作爲替代品,它必須是一個日期(如出生日期)。