2010-04-07 3 views
0

최근에 MySQL을 5.1.41로 업그레이드했습니다. 업 그레 이드 전에 다음 SQL이 작동했습니다 (또는 적어도 필자는이 작업을 기억하고 있다고 생각했습니다 ...이 작업을 설계 한 지 몇 주 후였습니다). 이제 SQL에서 "보관 된"열이 모호하다는 오류가 발생합니다. 어떻게 다른 방법으로 이것을 쓸 수 있습니까, 아니면 제가 모르는 다른 문제가 있습니까?업그레이드하기 전에 MySQL이 "열 모호함"오류를 반환합니다.

단순히 "unit_id", "lease_count"("a.unit_id"와 일치해야하는 unit_id가있는 다른 테이블에 저장 됨) 및 "lease_archived_count (다른 테이블에 저장된 unit_id 은 "a.unit_id")에 해당합니다.

SELECT a.unit_id, 
    (SELECT count(*) FROM o_leases WHERE unit_id = a.unit_id AND archived = 0) as lease_count, 
    (SELECT count(*) FROM o_leases WHERE unit_id = a.unit_id AND archived = 1) as lease_archive_count 

FROM p_unit a, properties b, portfolio c 

WHERE a.property_id = b.properties_id 
AND b.portfolio_id = c.portfolio_id 
AND a.archived = 0 

감사를 도와.

+0

테이블 (p_unit, properties, portfolio) 중 둘 이상에 아카이브 된 컬럼입니까? – Tommy

답변

1
. 나는 또한 선택 하위의 테이블을 제공하는 것이 좋습니다

만이 오류가 언급하고 한 장소가있을 수 있습니다 별칭 :

(SELECT count(*) FROM o_leases o WHERE o.unit_id = a.unit_id AND o.archived = 0) as lease_count, 
(SELECT count(*) FROM o_leases o WHERE o.unit_id = a.unit_id AND o.archived = 1) as lease_archive_count 

archived 필드가 p_unit 인 것처럼 보입니다.

+0

감사합니다. 문제의 근본 원인이 테이블에서 잘못된 열이되는 것을 발견했습니다 (지난 주에 하드 드라이브 충돌이 있었고 잘못된 테이블을로드했습니다). 하지만 당신의 신택스는 내가 처음에 사용해야했던 것입니다. – Ronedog

0

o_leases가 아카이브 된 필드가있는 유일한 테이블이 아니기 때문에 오류가 있다고 생각합니다. p_unit 또는 속성이나 포트폴리오에는 해당 열이 있어야합니다.

그러나 수정해야하는 다른 여러 가지 사항이 있습니다. 대부분의 데이터베이스에서 상관 관계가있는 하위 쿼리는 성능이 좋지 않으므로 조인으로 다시 작성해야합니다 (이 경우에는 대개 사례 문과 조인 만 필요함). 상관 관계가있는 서브 쿼리 작성은 일반적으로 고려하지 않아도됩니다.

둘째, 절대 암시 적 조인을 사용하지 않아야합니다. 유지 관리가 좋지 않고 우발적 인 교차 결합은 물론 조인에 대한 일반적으로 이해가 부족한 매우 나쁜 생각입니다. 나쁜 나쁜. 이런 종류의 코드는 18 년 전에 대체되었지만, 5 년 전에도 여전히 C# 또는 Java 코드를 더 나은 방법으로 재사용 할 수 있습니까?

+0

Thanks Hlgem. 솔직히 말해서, 나는 수년 전에이 방법으로 테이블에 가입하도록 가르쳐졌고, 그 이후로도 나를 위해 일 해왔다. 성과가 현명하다. 나는 둘 사이에 많은 차이를 보지 못했고 나는 하나가 다른 것보다 낫다는 많은 기사를 찾지 못했다. 그러나 우발적 인 교차 결합에 관한 귀하의 요지에 동의합니다. 내 마음은 자연스럽게 내 초기 코딩 일 때문에 암시 적 구문을 더 잘 이해합니다. 그럼에도 불구하고, 초보자가이 글을 읽는다면 ... 나는 당신이 교차 결합을 만들었을 때 당신이 통지받을 것임을 알지 못하는 새로운 명시적인 구문을 배우는 것에 동의합니다. – Ronedog

관련 문제