2016-06-14 50 views
0

我有一个查询,我输出了一些成果计数行JOIN

SELECT 
    t1.busName, 
    t1.busCity, 
    COUNT(t2.ofr_id) AS cntOffers 
FROM t1 
LEFT JOIN t2 ON (t2.ofr_busID = t1.busID) 

以上返回查询只有一行,但是,如果我删除COUNT,只留下下面的查询,我得到多个结果。我错过了什么?我怎样才能从第一个表中获取结果,同时从t2获得相关的结果呢?

SELECT 
    t1.busName, 
    t1.busCity 
FROM t1 
LEFT JOIN t2 ON (t2.ofr_busID = t1.busID) 
+0

在第一个查询中添加'GROUP BY t1.busName, t1.busCity' – Mihai

回答

2

您需要group by

SELECT t1.busName, t1.busCity, 
     COUNT(t2.ofr_id) AS cntOffers 
FROM t1 LEFT JOIN 
    t2 
    ON t2.ofr_busID = t1.busID 
GROUP BY t1.busName, t1.busCity; 

大多数数据库将在您的查询的版本,返回一个错误,因为你必须在SELECT未聚集和聚合列。

+0

哦,我需要GROUP BY的每一列吗? – santa

+1

@santa。 。 。将所有非聚合列包含在“GROUP BY”中是一个好主意 - 除非你真的真的知道你在做什么。 –

0

实际上,您的第一个查询中的COUNT()似乎在该字段上强制执行一个GROUP BY(因为聚合),这就解释了为什么只有一行,但这并不意味着您只有一行。

看看这个SQL Fiddle

的MySQL 5.6架构设置

CREATE TABLE TestData (a int, b int); 

INSERT INTO TestData 
    (a, b) 
VALUES 
    (1, 1), 
    (2, 2), 
    (3, 3); 

查询

SELECT a, count(b) from TestData 

Results

| a | count(b) | 
|---|----------| 
| 1 |  3 | 

正如戈登·利诺夫建议,你需要以复制相同的行为,而不COUNT明确使用GROUP BY