我試圖從兩個表中獲取產品和圖像的列表。當我加入他們的行列,並從產品表中的HasImage列中使用的情況下開關,我得到這個錯誤:SQL案例開關默認爲在空值上顯示佔位符圖像
錯誤:
Subquery returned more than 1 value.
This is not permitted when the subquery follows =, !=, <, <= , >, >=
or when the subquery is used as an expression.
當產品不具有的形象,我想取代它與默認圖像。
這裏是select語句:
SELECT
P.[ProductId]
,P.[ProductName]
--If HasImage is false show the default.jpg
,Case P.[HasImage]
WHEN 'True' THEN (Select I.[FileName] as ProductImage FROM [ProductImages] I
INNER JOIN [Product] P on P.ProductId = I.ProductId
WHERE I.Sequence=0)
WHEN 'False' THEN 'default.jpg'
END
FROM [Product] P
LEFT JOIN [ProductImages] I
on P.ProductId = I.ProductId
的問題是在當 '真'。這就是拋出錯誤的原因。
產品表
ProductId ProductName HasImage
1 Coffee Mug True
2 Pen False
3 Pencil False
產品照片表
ProductId Sequence FileName
1 0 Mug_Image1.jpg
1 1 Mug_2.jpg
1 2 Mug_Img3.jpg
存在用於產品編號= 1的多個圖像,但我用序列= 0至只有一個返回。
返回的數據我想應該是這樣的:
ProductId ProductName ProductImage
1 Coffee Mug Mug_Image1.jpg
2 Pen default.jpg
3 Pencil default.jpg
我已經試過COALESCE(NULLIF,左聯接和不同statments,但我還沒有得到這三種產品都顯示爲各種組合期望。
你能嘗試LIMIT 1(或TOP 1,取決於DBMS)子句中你內心的查詢? –
是的,工作。我必須在頂部添加一個DISTINCT。這就是訣竅! SELECT DISTINCT \t P.的[ProductID] ,P。[產品名稱] ,案例P. [HasImage] 如果 '真',那麼(選擇TOP 1 I. [文件名]作爲ProductImage FROM [ProductImages]我 INNER JOIN [Product] P on P.ProductId = I.ProductId WHERE I.Sequence = 0) WHEN'False'THEN'default。jpg' END FROM [Product] P LEFT JOIN [ProductImages] I on P.ProductId = I.ProductId – User970008
它似乎只是在工作。 @Juniad說得沒錯,但是你再次添加了'INNER JOIN [Product] P'並將'WHERE P.ProductId = I.ProductId'轉換爲On子句。您的子查詢會返回錯誤的圖像,因爲它沒有連接到外部查詢,特別是'FROM [Product] P'。您還需要從外部查詢中移除LEFT JOIN ProductImages,因爲您沒有從中獲取任何內容,並且因爲它複製了Product中的記錄。然後你可以刪除不同的。 –