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