【问题标题】:Get Product Image If The Status is Equal To 1如果状态等于1,则获取产品图像
【发布时间】:2016-09-26 18:49:38
【问题描述】:

这看起来很简单,但卡住了。所以先分享一下表结构:

产品:

CREATE TABLE [dbo].[Products](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NULL,
[CategoryID] [int] NULL,
[ProductName] [nvarchar](100) NULL,
[Details] [nvarchar](max) NULL,
[Price] [float] NULL,
[Stock] [float] NULL
)

产品图片:

CREATE TABLE [dbo].[ProductImages](
[ImageID] [int] IDENTITY(1,1) NOT NULL,
[ProductID] [int] NULL,
[ImageName] [nvarchar](100) NULL,
[ImageDetails] [nvarchar](max) NULL,
[Status] [int] NULL
)

ProductID 是 ProductImages 表中的外键。所以我想要显示所有带有状态 = 1 的图像的产品(ProductImages 表中的状态列)。现在这是一个逻辑。如果我对两个表都执行 INNER 或 LEFT JOIN,那么它将显示状态为 1 的产品,并带有以下查询:

SELECT m.ProductID, m.CategoryID, m.ProductName, m.Details, m.Price,
m.Stock, k.ImageName, k.Status FROM Products m LEFT JOIN ProductImages k
ON k.ProductID = m.ProductID WHERE k.Status = 1 

但我的要求是默认情况下所有产品都将显示图像(无可用图像)。只有 ProductImages 表中的图片会在 Status 为 1 时显示。如果 Status = 0,则显示产品但没有图片文本或其他内容。这是我应该得到的示例输出:

注意:只有状态为 1 的图片才会显示,否则默认不显示产品详情的图片。

【问题讨论】:

  • 能否附上样本数据?我想知道呈现的输出来自哪个查询。

标签: sql sql-server-2008


【解决方案1】:

我对两个输出中的状态列有点困惑,但如果我理解正确,这是一个简单的 CASE 表达式,当 Status <> 1 时显示 "No images" 字符串(意味着左连接没有找到任何带有Status = 1) 的图像,否则显示该列中的值:

SELECT 
  m.ProductID, m.CategoryID, m.ProductName, m.Details, m.Price, m.Stock, 
  k.Status,
  CASE WHEN k.Status <> 1 THEN 'No images' ELSE k.ImageName END AS ImageName, 
FROM Products m 
LEFT JOIN ProductImages k
  ON k.ProductID = m.ProductID AND k.Status = 1

【讨论】:

  • 您感到困惑,但您的查询似乎已经完成了这项工作。非常感谢。完美!
【解决方案2】:

您可以使用 status = 1 的情况,然后显示 ImageName 列,否则为 null

  SELECT 
      m.ProductID
    , m.CategoryID
    , m.ProductName
    , m.Details
    , m.Price
    , m.Stock
    , case k.status when 1 then k.ImageName else null end as imageName
    , k.Status 
    FROM Products m 
    LEFT JOIN ProductImages k
          ON k.ProductID = m.ProductID WHERE k.Status = 1 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2019-11-07
    相关资源
    最近更新 更多