2012-04-05 50 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在最后一个表上的左连接。