2016-09-26 65 views
1

這看起來很簡單,但卡住了。因此,讓我首先共享表結構:獲取產品圖像如果狀態等於1

產品:

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 
) 

ProductImages:

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 

但我的要求是所有的產品將在默認情況下如圖片(顯示無圖像可用)。當狀態爲1時,僅顯示來自產品圖像的圖像。如果狀態= 0,則顯示產品,但沒有圖像文本或任何其他圖像。這裏是我應該得到的樣本輸出:

image_status

注:只有狀態1的圖像將被默認顯示其他與產品細節沒有圖像。

+0

能否請您附上樣本數據?我想知道哪個查詢是來自哪個輸出。 –

回答

1

我有點困惑與兩個輸出你的狀態欄,但如果我理解正確,你這是顯示"No images"字符串時Status <> 1簡單CASE表達式(指左連接沒有找到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 
+0

你有困惑,但似乎你的查詢做得很乾淨。非常感謝。完善! –

1

可以使用的情況下,當狀態= 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 
相關問題