使用LEFT JOIN计算第二个表中的行数

时间:2016-06-14 00:31:47

标签: mysql

我有一个查询,我输出一些结果

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)

2 个答案:

答案 0 :(得分:3)

您需要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中有未聚合和聚合的列。

答案 1 :(得分: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 |

正如Gordon Linoff建议的那样,您需要明确使用GROUP BY,以便在没有COUNT的情况下复制相同的行为。