2014-03-19 92 views
0

这是我的第一查询Mysql的选择查询数据接合

SELECT 
    tax_productid, 
    CONCAT(GROUP_CONCAT(tax_code SEPARATOR " "), " ", sum(tax_iva), "%") AS tax 
FROM tb_tax t group by tax_productid order by tax_productid, prd_type desc; 

返回施加在产品的适当税(多税类型可以应用在单一的产品)

输出数据等。

tax_productid  tax 
========================= 
1     tax1 tax2 10% 
2     tax1 tax2 20% 
3     tax1 tax2 30% 

现在有一个另一个表product和查询就像

SELECT * FROM product ORDER BY productName; 

回报10产品记录。

我想要得到的产品明智的纳税排行榜,但如果没有税收秀空

SELECT 
    t1.*, 
    CONCAT(GROUP_CONCAT(tax_code SEPARATOR " "), " ", sum(tax_iva), "%") AS tax 
FROM 
    product t1, tb_tax t2 
WHERE 
    t2.tax_product = t1.id; 

此查询只返回3行。我想列出所有产品,如果表tb_tax没有产品条目,则返回null。所以我该如何实现这一点。

回答

1

您的查询使用INNER JOIN,你应该使用LEFT JOIN这种情况:

SELECT 
    t1.*, 
    t2.tax  
FROM 
    product t1 
LEFT JOIN (
    SELECT 
     tax_productid, 
     CONCAT(GROUP_CONCAT(tax_code SEPARATOR " "), " ", sum(tax_iva), "%") AS tax 
    FROM tb_tax 
    GROUP BY tax_productid 
) t2 ON t2.tax_productid = t1.id 
+0

不工作:(正如你在第一个查询看到我使用'GROUP_CONCAT()'和'总和()'可通过条款要求组。 这个查询给人以concating所有单行' tb_tax'数据在一行 –

+0

@MayankPandya错过了,更新了答案。 – xdazz

+0

感谢现在,它的工作原理。 –

0

使用LEFT JOIN

SELECT 
    t1.*, 
    CONCAT(GROUP_CONCAT(tax_code SEPARATOR " "), " ", sum(tax_iva), "%") AS tax 
FROM 
    product t1 
LEFT JOIN 
    tb_tax t2 
ON 
    t2.tax_product = t1.id;