【问题标题】:How can I return a message if there are no results from a query but display results if there are?如果查询没有结果,如何返回消息但如果有结果则显示结果?
【发布时间】:2021-07-20 22:03:58
【问题描述】:

处理 if/else 场景的最佳方法是,如果返回 0 行,则执行某些操作,否则显示来自 JOIN 查询的数据?

我有这个问题:

SELECT 
    c.UserID AS 'Seller'
    ,a.ArtistName AS 'Artist Name'
    ,a.AlbumName AS 'Album Name'
    ,c.Price AS 'Sale Price'
    ,a.Format AS 'Album Format'
FROM COLLECTIONS c
JOIN #WantlistTemp t ON t.AlbumID = c.AlbumID
JOIN ALBUMS a ON a.AlbumID = c.AlbumID
WHERE SaleIndicator = 'Y'

如果没有返回记录则显示一条消息,否则显示结果。

【问题讨论】:

标签: sql-server


【解决方案1】:

您的客户端程序将获得一个零行的结果集。当你看到它时,显示你想要的任何信息。

【讨论】:

    【解决方案2】:

    假设您希望查询始终返回有效的结果集,您会想到几个解决方案。

    您可以先将数据插入临时表,如果没有行,则返回特定结果,即

    SELECT 
        c.UserID AS 'Seller'
        ,a.ArtistName AS 'Artist Name'
        ,a.AlbumName AS 'Album Name'
        ,c.Price AS 'Sale Price'
        ,a.Format AS 'Album Format'
    into #Results
    FROM COLLECTIONS c
    JOIN #WantlistTemp t ON t.AlbumID = c.AlbumID
    JOIN ALBUMS a ON a.AlbumID = c.AlbumID
    WHERE SaleIndicator = 'Y'
    
    if @@rowcount=0
      select <same column list with appropriate values to indicate 0 rows>
    else
      select * from #Results
    

    另一个不使用临时表的选项是简单的exists 检查,

    if exists (
      SELECT *
      FROM COLLECTIONS c
      JOIN #WantlistTemp t ON t.AlbumID = c.AlbumID
      JOIN ALBUMS a ON a.AlbumID = c.AlbumID
      WHERE SaleIndicator = 'Y'
    )
    <your actual query here>
    else
    <your 0 rows scenario select statement>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多