2014-12-02 2 views
0
SELECT country.continent, country.name, city.district, city.name, city.population 
FROM world.country, world.city 
WHERE city.population < 3000000 
LIMIT 20, 30; 

도시 인구가 300만이 넘는 select 절의 내용을 보여주는 테이블 대신 데카르트 제품이 나타납니다.MYSQL Where 문/절을 무시합니다.

세계는 데이터베이스 국가의 이름이고 도시는

이 도움을 주시기 바랍니다 테이블입니다.

+2

두 테이블을 실제로하는 방식이 아닌 명시 적으로 조인해야합니다. 당신은 우리 테이블의 구조에 대해 더 많이 말해 줄 수 있습니까? –

+0

메신저 이후 구조를 효율적으로 설명하는 방법을 잘 모르기 때문에. 이 데이터베이스는 매우 큰 데이터베이스입니다. 이것은 메타 데이터입니다. http://imgur.com/VXyDinf 이것은 다이어그램입니다. http://imgur.com/1vkJW7y – felipe343

답변

2

당신은 함께 테이블을 조인해야합니다

SELECT country.continent, country.name, city.district, city.name, city.population 
FROM world.country JOIN 
    world.city 
    ON country.code = city.countrycode 
WHERE city.population < 3000000 
LIMIT 20, 30; 

SQL을 작성하기위한 힌트로서 다음 from 절에 쉼표를 사용하지 마십시오. 항상 명시 적 조인을 사용하십시오. 이는 암시 적 조인보다 강력합니다. 많은 사람들은 쿼리를 읽고 유지하기가 더 쉽다고 생각합니다.

+0

방금 ​​코드를 입력 했는데도 여전히 내 WHERE 문을 무시하는 것 같습니다. 선택한 것 중 하나에 대한 대신 country.code에서 ON을 사용 하시겠습니까? – felipe343

+0

@ felipe343 - 'country.code'가 기본 키이기 때문에. – EternalHour

+0

Oh jeez ... 나는 평등의 상징을 넣었다. 죄송합니다. 감사합니다. – felipe343