2011-12-09 38 views
3

D.MetaDataID = '580c215f-54cb-4449-8368-7d740be71973'和数据表没有行时,我能做些什么使我的语句返回Null?SQL JOIN WIth null

我试着左加入,但没有什么变化... :(

SELECT 
D.Value 
FROM dbo.Item I 
JOIN dbo.Data D ON D.ItemID = I.ID 
WHERE I.ItemTypeID = '14ea6709-1bf8-4d5c-9090-3ace3cc42874' --Instance.album 
     AND D.MetaDataID = '580c215f-54cb-4449-8368-7d740be71973' --freepacks 
+0

为什么一行一列表的空值优于零行一列表?为什么不简单地处理零行结果集? – onedaywhen

回答

7

你需要一个LEFT JOIN并就D移动状态进入ON条款,而不是WHERE。在WHERE条款将其转换您的查询返回到一个内部联接。

SELECT D.Value 
FROM dbo.Item I 
     LEFT JOIN dbo.Data D 
     ON D.ItemID = I.ID 
      AND D.MetaDataID = '580c215f-54cb-4449-8368-7d740be71973' 
--freepacks 
WHERE I.ItemTypeID = '14ea6709-1bf8-4d5c-9090-3ace3cc42874' --Instance.album 
+0

Thx @Martin我不知道在where子句中放置AND ANDMetaDataID ='580c215f-54cb-4449-8368-7d740be71973''将会产生什么影响 – ShadowG

+0

@ShadowG - 不匹配的行将会有'NULL'在'D.MetaDataID'列中,所以'WHERE'子句就消除了它们。 –

+0

嘿@Martin,如果我使用'ORDER BY CAST(D.Value AS DATETIME)ASC'子句,那么无论什么都是null。你知道我怎么能解决这个问题? – ShadowG

0

使它成为一个LEFT JOIN,左连接将保留原始表(dbo.Item)每一行,即使加入的表格(dbo.Data)将为NULL。当然,那么你也不能要求dbo.Data.anything在你的on子句中为非零,所以你应该删除这个标准。