2012-06-08 2 views
0

JPA, Hibernate, MySQL을 사용하고 있습니다.MySQL에서 오른쪽 outerjoin을 만드는 방법

두 개의 테이블 Upload, UploadRating이 있습니다. 각 업로드는 UploadRating 테이블 (예 : OneToMany)에서 여러 등급을 가질 수 있습니다. UploadRating에는 업로드를 평가 한 사용자를 정의하는 속성 사용자가 있습니다.

이제 UploadRating이 사용자에게 제공되지 않는 모든 업로드를 알고 싶습니다.

from Upload up, UploadRating ur where ur.upload=up and ur.user != :usrId 

나는 위의 질의에 결함이 알고 그래서 쿼리는 뭔가 같다. 이 경우에는 외부 조인을 사용해야합니다. 어떤 사람이 나에게 질의를 도와 ​​줄 수 있니?

답변

0

SQL에서 당신은 사용할 수 있습니다

select 
    * 
from 
    Upload up 
where 
    not exists (select * from UploadRating ur where ur.upload_id=up.id and ur.user = :usrId) 

upload_id 각 업로드의 고유 ID를 포함하는 업로드 평가 열이 있다고 가정.

이 같은 것 조인을 사용 동등한 SQL :

select 
    * 
from 
    Upload up 
    left outer join UploadRating ur on ur.upload_id=up.id 
where 
    (ur.user <> :usrId) or (ur.user is null) 
+0

나는 예외를 다음 얻고 이것을 시도하고있는 경우 : org.hibernate.hql.internal.ast.QuerySyntaxException : 예기치 않은 토큰을 : 근처에 line 1, column 72 [com.kids.domain.Upload에서부터 왼쪽 외부 조인으로 UploadRating ur.upload_id = up.id에 ur.subCont = : subCont와 ur.user! = : usrId와 moderated = true 그리고 semFinalUpload = : semiFinalUp orderby : orderBy] – Deepak

+0

'on'은 정확한 SQL이고, 나는 Hibernate가 그것을 좋아하지 않을 이유를 모른다 (또한'where' 조건에서 실수를 수정했다.) – MiMo

+0

나는 "존재하지 않음"의 첫 번째 옵션을 시도하십시오. 그러나 그 모든 행을 반환합니다. 두 테이블 모두에서 일반적인 열은 업로드됩니다. 즉 UploadRating.uploadId = Upload.id – Deepak

관련 문제