2012-04-17 93 views
1

我需要帮助为我的数据库创建查询。在MySQL查询中需要帮助 - GROUP BY

我有2个表,

资产它由(主机名,老板,工程师,日期,分支)

分支它由(ID,姓名,地址,区)的

branch.id是一个连接到asset.branch的主键,它显然是一个外键。

我想创建一个显示分支信息(id,名称,地址,区域)和该分支中资产数量的查询。

我尝试此查询:

SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b, asset a 
WHERE a.branch = b.id 
GROUP BY b.id; 

它的工作一目了然,但未能显示没有资产,它的分支信息。 我需要一个查询,该查询还显示具有0资产的分支。

回答

3
SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b 
LEFT JOIN asset a 
    on a.branch = b.id 
GROUP BY b.id, b.name, b.address, b.xcor, b.ycor, b.status 

左加入表示包括所有分支,无论资产是否存在。

site解释了左,右外全面和类型的连接视觉..我喜欢它:d

使用你更熟悉的语法(我认为)

SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b, asset a 
WHERE a.branch(+) = b.id 
GROUP BY b.id; 
+0

哇,工程真的很好!我不熟悉JOIN,所以我肯定会检查一下网站:D – user1055010 2012-04-17 02:12:39

+0

感谢给我另一个解决方案。 (+)是什么意思? – user1055010 2012-04-17 02:19:44

+0

(+)是不符合ansi标准的方式。在1987年之前,在大多数数据库中进行连接的唯一方法是使用第二种方法。 87年后,内纳,离开,完全外部和交叉连接成为一个标准。这两个应该给你等效的结果。想想(+)的含义...(哎呀,我有他们倒退(并将更正))如果相应的记录不存在于我的资产表中,无论如何返回分支。 – xQbert 2012-04-17 02:22:29