2013-06-29 123 views
0

我有以下查詢以從多個表中獲取產品ID,產品名稱,價格,描述和成分。SQL查詢所有產品,包括沒有說明的產品

SELECT TP.intProductID AS ProductID, TP.strName AS Name, TPP.decPrice AS Price, 
TD.strDescription AS Description, GROUP_CONCAT(TRH.strName  SEPARATOR ', ') AS Ingredients 
FROM TProducts TP JOIN 

    TProductsPrices TPP 
    on TP.intProductID=TPP.intProductID JOIN 

    TProductsDescriptions TPD 
    on TP.intProductID=TPD.intProductID JOIN 

    TDescriptions TD 
    on TPD.intDescriptionID=TD.intDescriptionID JOIN 

    TProductsIngredients TPI 
    on TPD.intProductID=TPI.intProductID JOIN 

    TRawHerbs TRH 
    on TPI.intIngredientID=TRH.intRawHerbID 

GROUP BY TPD.intProductID; 

該查詢找出所有的產品信息的方式應該的,但我希望能夠包括產品在我的結果沒有在描述表的說明(也許返回null或一個空字符串代替)。我怎麼能做這樣的事情?

回答

0

將適用的內連接更改爲左外連接。事情是這樣的:

SELECT TP.intProductID AS ProductID, TP.strName AS Name, TPP.decPrice AS Price, 
TD.strDescription AS Description, 
GROUP_CONCAT(TRH.strName  SEPARATOR ', ') AS Ingredients 
FROM TProducts TP JOIN 

TProductsPrices TPP 
on TP.intProductID=TPP.intProductID 

left JOIN TProductsDescriptions TPD 
on TP.intProductID=TPD.intProductID 

left JOIN TDescriptions TD 
on TPD.intDescriptionID=TD.intDescriptionID 

JOIN TProductsIngredients TPI 
on TPD.intProductID=TPI.intProductID 

JOIN TRawHerbs TRH 
on TPI.intIngredientID=TRH.intRawHerbID 

GROUP BY TPD.intProductID; 
+0

好吧,我新來加入,我試着在指定位置添加LEFT關鍵字,查詢仍排除沒有描述的產品 –

0

你在一個典型的方式,那就是你有一個產品表,然後由它帶來的東西構造查詢。爲了讓產品表中的所有內容保持一致,所有連接應該是left outer join s。此外,加入上productId應該回到原來的表:

SELECT TP.intProductID AS ProductID, TP.strName AS Name, TPP.decPrice AS Price, 
     TD.strDescription AS Description, 
     GROUP_CONCAT(TRH.strName  SEPARATOR ', ') AS Ingredients 
FROM TProducts TP left outer JOIN 
    TProductsPrices TPP 
    on TP.intProductID=TPP.intProductID left outer JOIN 
    TProductsDescriptions TPD 
    on TP.intProductID=TPD.intProductID left outer JOIN 
    TDescriptions TD 
    on TPD.intDescriptionID=TD.intDescriptionID left outer JOIN 
    TProductsIngredients TPI 
    on TP.intProductID=TPI.intProductID left outer JOIN 
    TRawHerbs TRH 
    on TPI.intIngredientID=TRH.intRawHerbID 
GROUP BY TPD.intProductID; 

這將讓所有的產品在TProducts,不管它們是否有其他表匹配。

一般來說(尤其是如果你正在學習連接的話),我會建議你在from條款中堅持一種join。這種結構,其中一切都是left outer join說「保持在第一個表」。