首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果记录为NULL,则返回所有记录并显示消息

如果记录为NULL,则返回所有记录并显示消息
EN

Stack Overflow用户
提问于 2018-05-10 20:53:08
回答 2查看 369关注 0票数 1

我正在处理来自我们分销商的内容,他们的数据库文件并不是世界上最好的。所以,我在尽我所能,尽我所能。

我有两张桌子,HLItemsHLImages

我需要从HLItems退回所有的产品。对于不存在的行,我需要显示一条消息。

  • 如果存在=“封面”
  • 如果不存在=“无掩护”

这是我试过的,但没有用。它返回所有记录,即使是空行,也会显示“前端掩护”。

封面是记录中显示的内容,如果记录存在的话。不然的话什么都没有。

右外连接

代码语言:javascript
复制
SELECT    
    (CASE 
        WHEN EXISTS (SELECT TOP 1 HLImages.Caption 
                     FROM HLImages  
                     RIGHT OUTER JOIN HLItems ON HLImages.ItemNo = HLItems.ItemNo) 
           THEN 'Front Cover'
           ELSE 'No Cover' 
     END) AS thumbnail, 
    Title, ItemNo, InternetCategoryID
FROM  
    HLItems
WHERE 
    (InternetCategoryID = 11)

只选择列

代码语言:javascript
复制
SELECT  
    (CASE 
        WHEN EXISTS (SELECT TOP 1 Caption
                     FROM HLImages
                     WHERE Caption = 'Front Cover') 
           THEN 'Front Cover'
           ELSE 'No Cover' 
     END) AS thumbnail, 
    Title, ItemNo, InternetCategoryID
FROM
    HLItems
WHERE (InternetCategoryID = 11)

像这样的事情,是人们所期待的。(ItemNo,和标题..。(为了简单起见,如下所示)

297110 -封面 297110 -空 49043128 -封面 49014741 -空 50563362 -封面 50301310 -空

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-10 21:44:42

中使用RIGHT OUTER JOIN

代码语言:javascript
复制
SELECT TOP 1 HLImages.Caption 
FROM HLImages  
RIGHT OUTER JOIN HLItems ON HLImages.ItemNo = HLItems.ItemNo

其效果是,HLItems中的所有行(正确的表)都包含在结果中,而不管是否存在来自HLImages的匹配行。这意味着,EXISTS中的这个查询始终是真的。这就是为什么你总是从那个'Front Cover'那里得到CASE

(只有在EXISTS中没有行时,HLItems才能为false。但是如果没有,外部查询就不会有一个非空的结果,所以在这种情况下也不会看到'No Cover'。)

那就是

代码语言:javascript
复制
SELECT TOP 1 Caption
FROM HLImages
WHERE Caption = 'Front Cover'

如果有任何带有标题'Front Cover'的图像,则总是会产生一个非空集,而不管它属于哪个产品。我假设有这样的图像,所以与上面的图片是一样的。

使用WHERE尝试一个简单的关联子查询。

代码语言:javascript
复制
SELECT    
    (CASE 
        WHEN EXISTS (SELECT *
                     FROM HLImages  
                     WHERE HLImages.ItemNo = HLItems.ItemNo
                           AND HLImages.Caption = 'Front Cover')
           THEN 'Front Cover'
           ELSE 'No Cover' 
     END) AS thumbnail, 
    Title, ItemNo, InternetCategoryID
FROM  
    HLItems
WHERE 
    (InternetCategoryID = 11)

如果您只想查看产品的图像是否存在,无论标题如何,您都可以删除AND HLImages.Caption = 'Front Cover'

票数 2
EN

Stack Overflow用户

发布于 2018-05-10 21:01:47

在不知道预期结果的情况下,一个简陋(可能不完美)的解决方案是使用外部应用。

代码语言:javascript
复制
SELECT   
case when image.Caption is not null then 'Front Cover'
    else 'No Cover'
end
as thumbnail, 
Title, 
ItemNo, 
InternetCategoryID
FROM  HLItems item
outer apply(
    SELECT   top 1 HLImages.Caption AS Caption
    FROM  HLImages 
    where HLImages.ItemNo = item.ItemNo
) image
WHERE (item.InternetCategoryID = 11)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50281345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档