2 つのテーブルから製品と画像のリストを取得しようとしています。それらに参加し、製品テーブルの HasImage 列でケース スイッチを使用すると、次のエラーが発生します。
エラー:
Subquery returned more than 1 value.
This is not permitted when the subquery follows =, !=, <, <= , >, >=
or when the subquery is used as an expression.
商品に画像がない場合、デフォルトの画像に差し替えたい。
選択ステートメントは次のとおりです。
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
問題は「True」の場合です。それがエラーをスローするものです。
製品表
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
ProductId=1 の画像は複数ありますが、Sequence = 0 を使用して 1 つだけを返します。
必要な返されたデータは次のようになります。
ProductId ProductName ProductImage
1 Coffee Mug Mug_Image1.jpg
2 Pen default.jpg
3 Pencil default.jpg
合体 (NULLIF、Left Joins、およびさまざまなステートメント) のさまざまな組み合わせを試しましたが、3 つの製品すべてを希望どおりに表示することはできませんでした。