Sql 如果状态等于1,则获取产品图像

Sql 如果状态等于1,则获取产品图像,sql,sql-server-2008,Sql,Sql Server 2008,这看起来很简单,但被卡住了。因此,让我先分享一下表结构: 产品: 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] [flo

这看起来很简单,但被卡住了。因此,让我先分享一下表结构:

产品:

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
)
产品图片:

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表中的状态列)。这是一个逻辑。如果我对这两个表进行内部联接或左联接,则将显示状态为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 
但我的要求是,所有的产品都会在默认情况下显示图像,比如(没有可用的图像)。当状态为1时,仅显示ProductImages表中的图像。如果Status=0,则显示产品,但不显示图像、文本或其他内容。下面是我应该得到的一个示例输出:


注意:只有状态为1的图像才会显示,否则默认情况下不会显示包含产品详细信息的图像。

我对两个输出中的状态列有点困惑,但如果我理解正确,这是一个简单的
案例
表达式,当
状态为1
(意味着左连接未找到任何状态为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
选择
m、 ProductID、m.CategoryID、m.ProductName、m.Details、m.Price、m.Stock、,
k、 地位,
当k.状态1为“无图像”时,则k.ImageName以ImageName结束,
来自产品m
左连接
在k.ProductID=m.ProductID和k.Status=1时

您可以在status=1时使用case,然后显示列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 

请附上示例数据好吗?我想知道显示的输出来自哪个查询。您感到困惑,但您的查询似乎已经完成了任务。非常感谢。太好了!