2014-05-17 7 views
0

이 SQL을 쿼리하려고 할 때 오류가 발생합니다. mysql 쿼리 모호한 오류

#1052 - Column 'charge_id' in where clause is ambiguous

다음은 내 쿼리입니다.

SELECT `inmate`.`inmate_id`,`inmate`.`fname`,`inmate`.`lname`,`inmate_case`.*,`case_information`.`case_id`,`case_charge`.*,`charge`.`charge_id` FROM inmate , `charge` 
LEFT JOIN `prison`.`inmate_case` ON `inmate`.`inmate_id` = `inmate_case`.`inmate_id` 
LEFT JOIN `prison`.`case_information` ON `inmate_case`.`case_id` = `case_information`.`case_id` 
LEFT JOIN `prison`.`case_charge` ON `case_information`.`case_id` = `case_charge`.`case_id` 
WHERE((charge_id = 3)) 
+0

누구와도 이름을 짓기 위해 노력하고 있습니다. charge_id = 3 – user3398034

+0

쿼리를 실행할 때 또는 결과 집합을 개체로 가져 오려고 할 때 오류가 발생합니까? case_charge 테이블 (from * from)도'charge_id' 열을 가질 가능성이 높습니다. – Danny

+0

암시 적 및 명시 적 JOIN 구문을 함께 사용하지 마십시오. 사실 암시 적 구문을 전혀 사용하지 마십시오. 그 외에도 다른 모든 열과 마찬가지로 모호성을 제거하십시오. 또한 악의적 인 "SELECT *"를 사용하지 마십시오. – Strawberry

답변

3

charge_id 열이있는 테이블이 여러 개 있어야합니다. 당신이 당겨해야 - 당신이 당신의 결과 집합에 넣어하고 있기 때문에 당신은 당신이 당신의 선택에서 일부 열을 드롭 할 수있는 이름과 성이 필요한 경우에는

WHERE charge.charge_id = 3 

WHERE 절을 변경할 수 있습니다 charge_id (아마 case_charge)이라는 열이 두 개 이상 있습니다. 당신은 같은에 SELECT를 단순화 할 수 있습니다 :

SELECT inmate.inmate_id, inmate.fname, inmate.lname 
FROM inmate 
INNER JOIN prison.inmate_case ON inmate.inmate_id = inmate_case.inmate_id 
INNER JOIN prison.case_information ON inmate_case.case_id = case_information.case_id 
INNER JOIN prison.case_charge ON case_information.case_id = case_charge.case_id 
INNER JOIN charge ON case_charge.charge_id = charge.charge_id 
WHERE charge.charge_id = 3 

하고 필요에 따라, 명시 적 SELECT에 열을 추가 할 수 있습니다. 내가 을 INNER JOIN s로 변경 한 것은 charge 테이블에 나타나는 수감자를 원했기 때문입니다. 다른 테이블에 나타나지 않을 수도있는 수감자를 끌어 오려고하는 경우 OUTER JOIN을 사용합니다. (비록이 경우에는 WHERE 절에 최종 필드를 넣기 때문에이 경우에도 계속 작동하지만, 케이스 또는 요금이 전혀 없더라도 모든 수감자를 반환 할 수 있습니다.

+0

여전히 같은 오류가 발생합니다. – user3398034

+0

또는 테이블과 필드에 대한 별칭을 사용하십시오. '... FROM charge c ..... WHERE c.charge_id = 3'. – GolezTrol

+0

@ user3398034 그것은'WHERE' 절뿐 아니라 필드가 언급 된 다른 곳 (여러분의 경우'SELECT')에도 적용됩니다. – GolezTrol