如果找不到值,则sql join返回null

时间:2012-01-31 12:07:23

标签: sql join

我有国家,度假村和度假村照片的表格。每张照片都可以标记为专辑的标题。我想选择带有国家ID和名称,度假村ID,名称和照片的已加入数据集,只有它标记为标题,否则为 - null。

我试着做以下事情:

select
    s.id as c_id,
    s.name as c_name,
    t.id as r_id,
    t.name as r_name,
    p.thumbnail as image,
    p.description as desc,
    p.is_title
from dbo.countries s
join dbo.resorts t on t.state=s.inc
left outer join dbo.resorts_photo p on p.resort_id=t.inc
where s.inc=@country_id

我有所有照片的清单 - 标题而不是。如果我通过is_title文件添加文件({和p.is_title = 1'),那么所有未标题照片的度假胜地将从结果数据中删除 - 而不是我想要的。

我只想得到类似的东西(见最后一行):

c_id c_name     r_id  r_name    image   desc  is_title
2    Australia  17    Adelaida  0xXXXX  NULL  1
2    Australia  178   BB Rief   0xXXXX  blah  1
2    Australia  160   Brum      NULL    NULL  NULL

1 个答案:

答案 0 :(得分:18)

在JOIN条件中包含额外谓词而不是WHERE子句,以便它们不会导致整行删除:

LEFT OUTER JOIN dbo.resorts_photo AS p
ON p.resort_id = t.inc
AND p.is_title = 1