我有一个查询,我输出一些结果
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 :(得分: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
的情况下复制相同的行为。