[SQL] ON 절에서 MySQL을 알 수없는 열
SQLON 절에서 MySQL을 알 수없는 열
나는 다음과 같은 MySQL의 쿼리를 가지고 :
SELECT p.*,
IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
pm.MediaID,
date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
astext(pg.Geometry) AS Geometry
FROM property p, propertygeometry pg
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
AND p.PropertyGeometryID = pg.id
GROUP BY p.id
그리고이 오류를 받고 있어요 :
# 1054 - '절에'알 수없는 열 'p.id'
지금까지 내가 바로 어떤 생각을 쿼리 모습을 볼 수 무엇을 잘못 될 수 있을까?
해결법
-
==============================
1.ANSI-89 스타일과 ANSI-92 스타일의 조인 혼합하지 마십시오. 그들은 혼란 오류가 발생할 수있는 다른 우선 순위를 가지고 있고, 그 여기에서 일어난 것입니다. 다음과 같이 귀하의 질의 해석되고있다 :
ANSI-89 스타일과 ANSI-92 스타일의 조인 혼합하지 마십시오. 그들은 혼란 오류가 발생할 수있는 다른 우선 순위를 가지고 있고, 그 여기에서 일어난 것입니다. 다음과 같이 귀하의 질의 해석되고있다 :
FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )
위의에서이 키워드 가입 쉼표 스타일도 고려 조인하기 전에 먼저 평가됩니다 사용하여 결합한다. 그 시점에서 테이블 p는 아직 선언되지 않았습니다.
MySQL의 설명서에서 :
나는 즉 키워드 조인을 사용, ANSI-92 스타일의 조인을 사용하여 항상 권하고 싶습니다 :
SELECT p.*, IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted, pm.MediaID, date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom', astext(pg.Geometry) AS Geometry FROM property p JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216 LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1 WHERE p.paused = 0 GROUP BY p.id
관련 :
-
==============================
2.이 전에 언급 한 바와 같이 사용하여 우선 순위 문제는 LEFT이 실행됩니다 가입 쉼표 연산자를 통해 조인 및 테이블 별칭에 대한 참조 때문에 그 시간에 존재하지 않습니다. 당신이 암시 적으로 그 문을 통해이 가입 사용하는 MySQL을 말할 수 있지만 당신은 또한 테이블이 먼저, 다음 왼쪽 thusly 히 결합 실행 합류 쉼표를 평가하기 위해 MySQL을 말할 수 있습니다 :
이 전에 언급 한 바와 같이 사용하여 우선 순위 문제는 LEFT이 실행됩니다 가입 쉼표 연산자를 통해 조인 및 테이블 별칭에 대한 참조 때문에 그 시간에 존재하지 않습니다. 당신이 암시 적으로 그 문을 통해이 가입 사용하는 MySQL을 말할 수 있지만 당신은 또한 테이블이 먼저, 다음 왼쪽 thusly 히 결합 실행 합류 쉼표를 평가하기 위해 MySQL을 말할 수 있습니다 :
SELECT p.*, IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted, pm.MediaID, date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom', astext(pg.Geometry) AS Geometry FROM (property p, propertygeometry pg) JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216 LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1 WHERE p.paused = 0 AND p.PropertyGeometryID = pg.id GROUP BY p.id
분리 된 테이블은 괄호 내에 포함 된 쉼표를 주목하라 (). 다른 조인에 테이블 별칭과 열은 이제 사용할 수 있습니다.
-
==============================
3.나는 DIFF 쿼리가 session.executeQuery ( "SELECT ID, 이름, 합계 (지불) 브랜드로 CUST 그룹에서, custType")를 수동으로 내부 입력에 가입하거나에 가진 이유 내부 HQL을 통해 내장되어 있습니다이 오류 알 수없는 열로 충돌 HQL이 생성 한 그대로 키워드에 가입하는 것은 옵션이 아닙니다. 그것은 다음과 같이 sumthing 쿼리를 생성합니다
나는 DIFF 쿼리가 session.executeQuery ( "SELECT ID, 이름, 합계 (지불) 브랜드로 CUST 그룹에서, custType")를 수동으로 내부 입력에 가입하거나에 가진 이유 내부 HQL을 통해 내장되어 있습니다이 오류 알 수없는 열로 충돌 HQL이 생성 한 그대로 키워드에 가입하는 것은 옵션이 아닙니다. 그것은 다음과 같이 sumthing 쿼리를 생성합니다
select cust_id, name, sum(paid), c.custTypeId from customer c, custType ct on c.custTypeId = ct.custTypeId
나는 101 % 확신은 해당 열을 부담입니다 때 "알 수없는 c.custTypeId"열을 말한다.
내 클래스 / 관계 :
Customer { Integer custId CustomerType custType } CustomerType{ Integer custTypeId string code }
"고객으로부터, custType"라인에서 쉼표에 문제가 자리 잡고 있습니다. 그것은 위에서 언급 한 대답으로 가입 단어로해야한다. 이 HQL과 생성되고 있기 때문에, 나는 그렇게 할 수 없습니다. 내가 custType를 선택 쿼리 대신 입력하는 수정 않았다, 나는 custType.id, custType.code를 선택 입력
나는 그것이 기본 알고 있지만 나 같은 첫번째 타이머를 위해, 그것은 투쟁이었다.
from https://stackoverflow.com/questions/4065985/mysql-unknown-column-in-on-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] EXCEPT SELECT * (0) | 2020.03.20 |
---|---|
[SQL] 기본 정렬 순서를 다루는 SQL 모범 사례 (0) | 2020.03.20 |
[SQL] SQL 서버에서 날짜로 변환 VARCHAR (0) | 2020.03.20 |
[SQL] 어떻게 자바 준비된 문장 삽입에 대한 테이블 이름 변수를 사용하여 [중복] (0) | 2020.03.20 |
[SQL] 열을 동적으로 변환 행에 MySQL의 쿼리 (0) | 2020.03.20 |