【问题标题】:SQL change query to show orphansSQL 更改查询以显示孤儿
【发布时间】:2010-09-01 09:52:01
【问题描述】:

给出查询:

SELECT
    tblProducts.ID, tblProducts.views, tblProducts.productName, tblProducts.isForSale, tblProducts.isLimitedStock, tblProducts.stockCount, tblProducts.description, tblProducts.weightKG, tblProducts.basePrice, tblProducts.dateCreated, tblProductCats.catName, 
    (SELECT COUNT(*) FROM tblProductPrices WHERE productId = tblproducts.id) AS priceMods, 
    (SELECT COUNT(*) FROM tblcomments WHERE productId = tblproducts.ID) AS comments,
    (SELECT COUNT(*) FROM tblProductImages WHERE productID = tblproducts.id) AS imageCount
FROM
    tblProducts
INNER JOIN
    tblProductCats ON tblProducts.categoryID = tblProductCats.ID

如果产品的类别 ID 为 0 (tblProducts INNER JOIN tblProductCats ON tblProducts.categoryID = tblProductCats.ID) 它不会返回产品记录,是否可以修改查询使其返回值为 0 的记录并将类别名称显示为“孤儿”?

【问题讨论】:

    标签: sql sql-server join


    【解决方案1】:
    SELECT ...
           ISNULL(tblProductCats.catName,'Orphan') AS  catName   ,
    /*
    Or possibly...
           CASE
                  WHEN tblProducts.categoryID = 0
                  THEN 'Orphan'
                  ELSE tblProductCats.catName
           END AS catName
           */
           ...
    FROM   tblProducts
           LEFT OUTER JOIN tblProductCats
           ON     tblProducts.categoryID = tblProductCats.ID
    

    【讨论】:

    • 该死的,我正要发布同样的东西!大声笑,无论如何+1
    • 感谢您的回答,如果 tblProducts.categoryID = 0 但它仍然不会返回该记录。我认为我需要使用不同类型的联接?
    • 我的回答确实对您的问题使用了不同类型的 JOIN。你是说左连接不起作用?如果是这样,您是否有一个未向我们展示的 WHERE 子句将其转换为内部连接?
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2019-02-03
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多