2012-03-27 3 views
4

1c에 대한 대답이 무엇인지 궁금합니다. 이 웹 사이트 :SQL - GROUPING, ID, NAME

http://sqlzoo.net/6.htm

SELECT company 
FROM route WHERE stop=4 
GROUP BY name, ID 

이 분명히 작동하지 않는 경우, ID와 이름은 상관없이 게재하지 않습니다. 여기서 누락 된 것은 무엇입니까? 감사.

sql: Unknown column 'name' in 'group statement'

route tabel에는 name 없습니다 : 그것은 당신이 오류를 제공

답변

3
SELECT stops.id, stops.name 
FROM route 
INNER JOIN stops on route.stop = stops.id 
WHERE route.num = 4 AND route.company = 'LRT' 

다른 테이블에 데이터를 필터링하는 필터.

0

. 테이블 구조는 다음과 같습니다

stops(id, name) 
route(num,company,pos, stop) 

그래서이 퀴즈에 대한 답은 다음과 같습니다

SELECT s.id, s.name 
FROM route r, stops s 
WHERE r.stop= s.id 
and r.num = 4 AND r.company = 'LRT' 
당신은 반환 할 데이터로 테이블을 조인 할 필요가
0
select s.id, s.name 
from stops s 
inner join route r 
    on s.id = r.stop 
where r.num= 4 
    AND r.company= 'LRT' 
1

이것은 작동하며 불필요한 테이블 조인은 포함하지 않습니다. 좋은 경험 법칙은 EXISTS을 사용하여 출력을 필요로하지 않는 테이블의 값을 확인하는 것입니다. 그렇지 않은 경우 JOIN

SELECT stops.id, stops.name 
FROM stops 
WHERE EXISTS 
(
    SELECT 1 FROM route 
    WHERE route.stop = stops.id AND num = '4' AND company = 'LRT' 
) 
+0

대신 JOIN 대신 EXISTS를 사용하십시오. – wickedone

+1

@wickedrunr http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx http://stackoverflow.com/questions/2177346/can-an-inner-join-offer-better -performance-than-exists이 기사에서 말하는 것처럼 질의에 따라 다르지만 일반적으로 출력을 사용하지 않으면 더 효과적인 것으로 EXISTS를 찾았습니다. –

+0

감사합니다. 전에는 들어 본 적이 없습니다. – wickedone