首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SELECT CASE WHEN THEN (SELECT)

SELECT CASE WHEN THEN (SELECT)
EN

Stack Overflow用户
提问于 2013-02-15 07:24:59
回答 4查看 142.6K关注 0票数 7

我正在尝试根据产品类型为产品选择不同的结果集。因此,如果我的产品应该是一本书,我希望它在UPC和Artist中查找正常的产品,但是这些细节是无关紧要的,而对于另一个产品,我想要一个完全不同的结果集。

代码语言:javascript
复制
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

我不确定我错在哪里。

EN

回答 4

Stack Overflow用户

发布于 2013-02-15 08:10:35

您可以尝试使用case语句的其他格式

代码语言:javascript
复制
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

票数 13
EN

Stack Overflow用户

发布于 2014-02-25 16:33:43

您应该避免使用嵌套select,我甚至可以说,您永远不应该在语句的实际select部分使用它们。您将为返回的每一行运行select。这是一个非常昂贵的手术。而是使用joins。它的可读性更好,性能也更好。

在您的情况下,下面的查询应该会有所帮助。注意case语句仍然存在,但现在它是一个简单的比较操作。

代码语言:javascript
复制
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

我使用了左连接,因为我不知道业务逻辑。

票数 8
EN

Stack Overflow用户

发布于 2013-02-15 07:33:23

首先,第一个select有6列,第二个有4列。也许使两者具有相同的列数(添加空值?)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14885912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档