2010-09-01 69 views
1

给查询:SQL更改查询,以显示孤儿

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作为值并将类别名称显示为'孤儿'?

回答

5
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 
+0

Damnit,我正要发布相同的东西!大声笑,+1无论如何 – Codesleuth 2010-09-01 09:59:02

+0

感谢您的答案,如果tblProducts.categoryID = 0虽然然后它不会仍然返回该记录。我想我需要使用不同类型的连接? – 2010-09-01 09:59:45

+0

我的答案对你的问题使用了不同类型的JOIN。你说左连接不起作用吗?如果是这样,你有一个WHERE子句,你没有向我们展示将它转换为内部联接? – 2010-09-01 10:03:27