2016-11-06 3 views
-2

사용자에 대한 테이블과 orders 테이블과 cities_translation 인 도시 이름 테이블이 있습니다. 사용자 테이블에는 사용자 ID, 이름, 성, 도시 ID 및 대표 ID가 있습니다. 대표자는 같은 테이블에있는 다른 사용자 일뿐입니다.MySQL 자체 조인 테이블 오류 # 1066 - 고유 테이블/별칭이 아닙니다 : 'cities_translation'

Select 
    orders.id, orders.user_id, orders.total, orders.final_total, orders.order_status_id, 
    orders.unix_time, u.id,u.email, u.first_name, u.last_name,m.first_name as rep_firstname, 
    m.last_name as rep_lastname, u.representative_id,u.city_id,cities_translation.* 
From orders,cities_translation,users u 
    left join cities_translation 
Where u.city_id = cities_translation.city_id 
    And orders.user_id = u.id 
    And cities_translation.lang_id='2' 
    And orders.order_status_id='1' 
Left join users r on u.representative_id = r.id 
Group by orders.user_id 
Limit 5 

그러나 결과는 다음과 같습니다 : 제가하고 싶은 것은이

user id first name last name city name representative wholesaler 

    1   foo   bar  city1   2    yes 
    2   user   user  city2   0    no 

예상 결과 같은 표를 얻기 위해 이러한 테이블을 조인하는 것은

user id first name last name order id city name representative 

    1   foo   bar   1   city1   user  

쿼리입니다 "# 1066 - 고유하지 않은 테이블/별칭 : 'cities_translation' "이 오류를 피하고 각 도매 업체의 대표 이름을 얻으려면이 쿼리를 다시 쓰는 방법

+0

암시 적 및 명시 적 조인 구문을 혼용하지 마십시오! 적절한 조인 구문 만 사용하면이 문제를 피할 수 있습니다. 또한 ** 별명 ** ** 테이블마다 다르게, 그러면이 문제가 발생하지 않습니다. – sagi

+0

어디서 볼 수 있습니까? 별칭은 어디서 오는거야? –

답변

2

당신은 명시 적으로 혼합하고 implict는

From orders,cities_translation,users u 
left join cities_translation 

에 가입하고 당신은

어쨌든 오류 메시지가 두 시간을 사용하는 것이 열 사실과 관련이 .. 적절한 EXPLICT이 형식에 가입 채택해야 테이블 cities_translation (의 이 테이블 두 시간을 필요로하는 경우 테이블의 각 단일 istance를 참조하여 관련 열 이름

에 대한 접두어로 올바른 별칭을 사용하는 당신은 적절한 별칭을 사용해야합니다

) 가입에서 왼쪽으로

1

오류가 암시 하듯이 두 번 조인되는 테이블에 대한 고유 한 별칭을 만들어야합니다.

Select 
    orders.id, orders.user_id, orders.total, orders.final_total, orders.order_status_id, 
    orders.unix_time, u.id,u.email, u.first_name, u.last_name,m.first_name as rep_firstname, 
    m.last_name as rep_lastname, u.representative_id,u.city_id,cities_translation.* 
From orders,cities_translation ct1,users u 
    left join cities_translation ct2 
ON u.city_id = ct1.city_id /** you probably wanted ON here INSTEAD OF WHEN*/ 
    And orders.user_id = u.id 
    And ct2.lang_id='2' 
    And orders.order_status_id='1' 
Left join users r on u.representative_id = r.id 
Group by orders.user_id 
Limit 5 

ct1 및 ct2를 적절하게 변경하십시오.

사이드 노트 : 소문자로 SQL 예약어를 대문자와 열 테이블 이름으로 쓰는 것이 일반적입니다.
명시 적 조인과 암시 적 조인을 혼합합니다. 나중에 코드를 읽을 때 항상 혼란을 겪습니다. 가능한 경우 Explicit 조인을 사용해보십시오.
이 형태의 GROUP BY는 mysql 5.7 이상에서는 작동하지 않습니다.

+0

어떤 집계없이 조인과 그룹 간의 where 절은 괜찮습니까? –

+0

oops @ P.Salmon 지적 해 주셔서 감사합니다! 물론 다른 오류 – e4c5

+0

오류가 발생합니다 : "근처 'u.city_id = ct1.city_id 및 orders.user_id = u.id 및 ct2.lang_id ='at line 7" –