2014-05-11 3 views
0

여러 테이블 (tcountry, tcity, tcompany, temployee)을 쿼리해야만 국가/도시/인구/회사/직원 수에 대한 최종 답을 얻을 수 있습니다. 어딘가에서 나는 실수를 저 지르려고합니다.sql이 여러 테이블을 쿼리 할 때 오류가 발생했습니다.

테이블 tcountrytcity은 (company_name)에 동일한 이름 (country_name) 테이블 tcitytcompany 같은 이름 (city_name) 테이블 tcompanytemployee는 동일한 이름을 가진 하나의 열 모두가 하나의 열 두 또한이 하나의 열이 .

검색어 :

SELECT 
    tcountry.country_name AS country, 
    tcountry.country_population AS population1, 
    tcity.city_name AS city, 
    tcity.city_population AS population2, 
    tcompany.company_name AS company, 
    COUNT AS (*) employee 
FROM 
    temployee 
INNER JOIN 
    tcity ON temployee.company_city_name = tcity.city 
INNER JOIN 
    tcountry ON tcity.country_name = tcountry.country 
ORDER BY 
    number_of_employees 
+1

과 같아야합니다

-하지만 테이블은'tcompany'는의에 표시되지 않습니다 'JOIN' statements ..... –

+0

RDBMS를 나열하지 않았습니다. 대부분은 GROUP BY가 없으므로 구문 오류가 발생합니다. 직원 수를 제외하고는 아무 것도 필요하지 않으므로 테이블 참조 하위 쿼리에서 'company_name'을 사용하여 그룹화 할 수 있습니다. 테이블 참조 하위 쿼리는 해당 열의 인덱스를 사용할 수 있어야합니다 (현재 쿼리와 달리, 결과적으로'GROUP BY'는 너무 넓어서 그렇게 할 수 없다). 때로는 회사 이름과 같이 정보가 변경 될 때 대개 참조/결합 할 수있는 '대리 키'(대개 숫자)를 사용하는 것이 가장 좋습니다. –

답변

1
COUNT AS (*) employee 

는 또한

COUNT(*) AS employee 

해야한다, 나는 당신이 marc_s 이미 지적했듯이 COUNT(*) AS number_of_employees

말을 의미 믿는다 해당 테이블에서 하나의 열을 가져 오는 경우에도 tcompany과 결합하지 않습니다. 귀하의 질의 당신은`SELECT` 명령의 열 목록에 tcompany``에서 열 나열되어

SELECT 
    tcountry.country_name AS country, 
    tcountry.country_population AS population1, 
    tcity.city_name AS city, 
    tcity.city_population AS population2, 
    tcompany.company_name AS company, 
    COUNT(*) AS number_of_employees <-- Here 
FROM 
    temployee 
INNER JOIN 
    tcity ON temployee.company_city_name = tcity.city 
INNER JOIN 
    tcountry ON tcity.country_name = tcountry.country 
INNER JOIN tcompany 
ON tcompany.company_name = temployee.company_name <-- assumption 
ORDER BY 
    number_of_employees 
+0

의견을 보내 주셔서 감사합니다. 웬일인지 나는 직원의 수가 2 배 더 크다 (도시 Y에 X 사에 5 명의 직원이 있지만 10 명을 얻는다) 대답을 얻고있다. 어떤 아이디어? – user3625305

+0

@ user3625305, 샘플 데이터를 보지 않으면 대답 할 수 없습니다. 아마 대부분의 국가/도시가 반복됩니다. 또한, 그것은 완전히 별도의 질문이며 별도로 게시해야합니다. 이 스레드를 닫고 모든 테이블 스키마뿐만 아니라 쿼리에 관련된 모든 테이블의 몇 가지 샘플 데이터와 함께 별도의 질문을 게시하는 것이 좋습니다. 또한이 대답을 수락하는 것을 잊지 마십시오. – Rahul

관련 문제