2016-06-14 2 views
0

은 내가 COUNT를 제거 만 쿼리 아래에두면 I 출력이 어떤 결과를카운트 행은

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

반환 위의 쿼리는 하나의 행, 그러나, 나는 여러 결과를 얻을 쿼리가 가입 . 내가 뭘 놓치고 있니? 그리고 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에 집계되지 않은 집계 열을 가지고 있기 때문에

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; 

대부분의 데이터베이스는 쿼리의 버전에 오류를 반환합니다.

+0

아, t1의 각 열에서 GROUP BY가 필요합니까? – santa

+1

@ 산타. . . 실제로 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 | 

16,고든 리노 프가 제안한 것처럼, 당신은 COUNT없이 동일한 동작을 복제하기 위해 명시 적으로 GROUP BY을 사용해야합니다.