我正在尝试根据产品类型为产品选择一组不同的结果。 因此,如果我的产品应该是一本书,我希望它能够查找UPC和艺术家的正常产品,但这些细节无关紧要,对于另一种产品,我想要一组完全不同的结果。
SELECT CASE Product.type_id
WHEN 10 THEN (
SELECT
Product.product_id,
Product.type_id,
Product.product_name,
Product.UPC,
Product_Type.type,
CONCAT_WS(' ' , first_name, middle_name, last_name ) AS artistC
FROM Product, Product_Type, Product_ArtistAuthor
WHERE Product.type_id = Product_Type.type_id
AND Product.product_id = $pid
AND Product.artist_id = Product_ArtistAuthor.artist_id
)
ELSE (
SELECT
Product.product_id,
Product.type_id,
Product.product_name,
Product_Type.type
FROM Product, Product_Type
WHERE Product.type_id = Product_Type.type_id
AND Product.product_id = $pid
)
END
FROM Product
WHERE Product.product_id = $pid
我不确定我哪里出错了
答案 0 :(得分:7)
您可以尝试使用案例陈述的其他格式
CASE WHEN Product.type_id = 10
THEN
(
Select Statement
)
ELSE
(
Other select statement
)
END
FROM Product
WHERE Product.product_id = $pid
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms181765.aspx。
答案 1 :(得分:5)
你应该避免使用嵌套选择,我会说你不应该在你的陈述的实际选择部分使用它们。您将为返回的每一行运行该选择。这是一项非常昂贵的操作。而是使用连接。它更具可读性,性能更好。
在您的情况下,下面的查询应该有所帮助。注意case语句仍然存在,但现在它是一个简单的比较操作。
select
p.product_id,
p.type_id,
p.product_name,
p.type,
case p.type_id when 10 then (CONCAT_WS(' ' , first_name, middle_name, last_name )) else (null) end artistC
from
Product p
inner join Product_Type pt on
pt.type_id = p.type_id
left join Product_ArtistAuthor paa on
paa.artist_id = p.artist_id
where
p.product_id = $pid
我使用了左连接,因为我不知道业务逻辑。
答案 2 :(得分:0)
首先,第一个选择有6列,第二个选择有4列。也许两者都有相同数量的列(添加空值?)。
答案 3 :(得分:0)
我最终离开了SELECT查询中的公共属性,并在页面中稍后进行了第二次SELECT查询。我使用php IF命令根据第一个SELECT查询调用不同的脚本,脚本包含第二个SELECT查询。