2012-04-05 40 views
0

編輯:現在由於某種原因,每個productid只顯示一次而不是取決於它有多少變化?有任何想法嗎? (我使用的查詢是我列出的最後一個查詢)添加第四個表格加入時結果減少

這裏是我的三個表連接查詢

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name 
FROM xcart_products xp 
JOIN xcart_classes xc ON xp.productid = xc.productid and xc.class = 'Color' 
JOIN xcart_class_options xco ON xc.classid = xco.classid 
ORDER by xp.product DESC 

現在這裏一切都很正常,我得到約2,000結果,一切組織和排列正確。

現在我想添加第四個表來計算每個xi.id的xi.optionid數量,但由於某種原因,我只能獲得大約200個結果,並且無法找出原因。這裏是我試圖運行

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name, count(xi.optionid) as cnt 
    FROM xcart_products xp 
    INNER JOIN xcart_classes xc ON xp.productid = xc.productid AND xc.class = 'Color' 
    INNER JOIN xcart_class_options xco ON xc.classid = xco.classid 
    INNER JOIN xcart_images_D xi ON xi.optionid = xco.optionid 
    GROUP BY xp.product 
    ORDER by xp.product DESC 

這裏查詢的每個表的基本架構

xcart_products - 
    + productid* 
    + product 
xcart_classes - 
    + classid* 
    + productid (xcart_products.productid) 
xcart_class_options - 
    + optionid* 
    + classid (xcart_classes.classid) 
    + option_name 
xcart_images_D - 
    + imageid* 
    + optionid (xcart_class_options.optionid) 
    + id (xcart_products.productid) 

查詢我目前使用 -

SELECT xp.productid, xp.product, xc.classid, xco.optionid, xco.option_name, count(xi.optionid) as cnt 
FROM xcart_products xp 
JOIN xcart_classes xc ON xp.productid = xc.productid AND xc.class = 'Color' 
JOIN xcart_class_options xco ON xc.classid = xco.classid 
LEFT JOIN xcart_images_D xi ON xi.optionid = xco.optionid 
GROUP BY xp.product 
ORDER by xp.product DESC 
+0

第一個查詢中圖像表 – 2012-04-05 16:35:54

+0

中的記錄數是多少,您沒有GROUP BY語句。而且,您正在使用不同種類的JOIN。 – 2012-04-05 16:38:35

回答

1

嘗試使用LEFT OUTER JOIN代替。

select xp.productid, 
    xp.product, 
    xc.classid, 
    xco.optionid, 
    xco.option_name, 
    count(xi.optionid) as cnt 
from xcart_products xp 
inner join xcart_classes xc on xp.productid = xc.productid 
    and xc.class = 'Color' 
inner join xcart_class_options xco on xc.classid = xco.classid 
left outer join xcart_images_D xi on xi.optionid = xco.optionid 
group by xp.product 
order by xp.product desc 
+0

由於某種原因,每個productid只顯示一次,而不取決於它有多少變化?有任何想法嗎? – Eric 2012-04-05 17:11:20

+1

您正在使用xp.product進行分組。如果一個產品有mabny productids,並且你想看到它們,那麼'group by xp.product,xp.productid'。 – RedFilter 2012-04-05 17:17:45

1

用戶a在最後一個表上的左連接。