Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果为Null,则返回默认值_Sql_Sql Server_Select - Fatal编程技术网

Sql 如果为Null,则返回默认值

Sql 如果为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)

数据库: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)))
问题是,我有几个没有图片的“列表”,由于这个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
    部分?我尝试过,但它不起作用。如果人们想尝试自己的一些陈述,我会发布服务器信息?我将创建一个新的虚拟数据库。