2010-09-01 2 views
1

Donnez la requête:requête SQL de changement pour montrer les orphelins

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 

Si l'ID de la catégorie du produit est 0 (tblProducts INNER JOIN tblProductCats ON tblProducts.categoryID = tblProductCats.ID) il ne sera pas retourner le dossier produit, est de toute façon de modifier la requête afin qu'il ne retourne dossiers avec 0 comme valeur et affiche le nom de la catégorie en tant que «orphelin»?

Répondre

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, j'étais sur le point de poster la même chose! lol, +1 de toute façon – Codesleuth

+0

Merci pour la réponse, si tblProducts.categoryID = 0 mais alors il ne retourne pas cet enregistrement encore. Je pense que je dois utiliser un type de jointure différent? –

+0

Ma réponse utilise un type différent de JOIN à votre question. Voulez-vous dire que la jointure à gauche ne fonctionne pas? Si oui, avez-vous une clause WHERE que vous ne nous avez pas montrée et qui la convertit en une jointure interne? –

Questions connexes