Sql 如果为Null,则返回默认值
数据库:MS SQL 2008Sql 如果为Null,则返回默认值,sql,sql-server,select,Sql,Sql Server,Select,数据库:MS SQL 2008 SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID FROM Listing INNER JOIN Pictures ON Listing.ID = Pictures.ListingID WHERE (Pictures.ID = (SELECT MIN(ID) FROM Pictures WHERE (ListingID = Listing.ID)
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID
FROM Listing INNER JOIN Pictures ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID) FROM Pictures WHERE (ListingID = Listing.ID)))
问题是,我有几个没有图片的“列表”,由于这个SQL脚本,它们没有显示出来。我怎样才能让他们出现
如果值为空,可能会给Pictures.Picture列一个值“default.jpg”?我很迷茫,所以如果有人能帮忙,那就太棒了。对不起,如果我问的问题也很糟糕,我不明白如何真正问我需要它做什么。但是如果你想知道更多的细节,我会发布的
每个列表可以有用户想要的任意多的图片,我需要这个脚本来显示一个列表,即使它没有图片
第二阶段
谢谢大家。到目前为止,我正在学习一些我甚至不知道存在的新命令。现在的问题是它为列表中的每个图片返回一行。但是默认的图像效果很好
SELECT Listing.Title, Listing.MLS, coalesce(Pictures.PictureTH, '../default_th.jpg') as PictureTH, coalesce(Pictures.Picture, '../default.jpg') as Picture, Listing.ID FROM Listing LEFT
OUTER JOIN Pictures ON Listing.ID = Pictures.ListingID
如何获取它,使其每个ListingID只返回1行?需要进行左连接
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID
FROM Listing LEFT JOIN Pictures ON Listing.ID = Pictures.ListingID
使用
左侧外部联接
而不是内部联接
内部联接
将在且仅当存在满足联接的结果时返回结果
左侧外部联接
将从左侧表返回结果,如果联接满足,还将从右侧表添加结果
如果需要转换从非满意联接返回的空值,则使用coalesce
函数,如coalesce(Pictures.Picture,'default.jpg')
两件事:
left-outer-join
而不是internal-join
获取所有列表,即使缺少图片合并
应用默认值
SELECT Listing.Title
, Listing.MLS
, Pictures.PictureTH
, coalesce(Pictures.Picture, 'default.jpg') as Picture
, Listing.ID
FROM Listing
LEFT OUTER JOIN Pictures
ON Listing.ID = Pictures.ListingID
SELECT Listing.Title
, Listing.MLS
, Pictures.PictureTH
, coalesce(Pictures.Picture, 'default.jpg') as Picture
, Listing.ID
FROM Listing
LEFT OUTER JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE Pictures.ID is null
OR Pictures.ID = (SELECT MIN(ID)
FROM Pictures
WHERE (ListingID = Listing.ID)))
如果要在Pic为空时设置默认值,可以通过COALESCE关键字进行设置:
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH,
COALESCE (Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID
FROM Listing LEFT JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID)
FROM Pictures WHERE (ListingID = Listing.ID)))
您也可以通过IsNull实现这一点,如下所示:
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH,
ISNULL(Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID
FROM Listing LEFT JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID)
FROM Pictures WHERE (ListingID = Listing.ID)))
您可以阅读有关IsNull和Coalesce的信息,您使用的是什么数据库
如果是sql server 2005或更高版本或oracle,您可以使用pivot命令来实现这一点。有效,但也会为每张图片返回一行。所以它给了我7个结果,因为清单1中有6个图片,清单2没有图片,但是返回了。但是我如何使它在每个列表中只返回1行,而不是像图片一样多的行?如果有多个图片,但您只希望返回一行,那么使用哪一个图片的规则是什么?对不起,在原始查询中未看到where子句。补充说,通过测试,包括没有匹配图片的行。MSSQL 2008,我也将在顶部发布该信息。您是否尝试了原始查询的
where
部分?我尝试过,但它不起作用。如果人们想尝试自己的一些陈述,我会发布服务器信息?我将创建一个新的虚拟数据库。