2011-11-07 2 views
2

까다로운 것의 비트.IF/case로 내부 조인 필드를 선택하는 방법은 무엇입니까?

일부 데이터를 정리하는 중이지만 데이터 크기 때문에 데이터를 처리하는 데 꽤 오래 걸릴 것이므로 업그레이드가 진행되는 동안 앱을 실행해야합니다. 그래서 저는 주석 테이블과 사진 테이블을 가지고 있습니다. 각 주석의 기록은이 중 하나를 OBJECT_ID에 저장하거나 이 OBJECT_ID 에 저장 photo_id photo_d_id : 내부 쿼리에서 사진 테이블에 가입하지만,에 innerjoin를 수행 할 필요가에

if comment_type = 8 then object_id = photo.photo_p_id 
if comment_type = 17 then object_id = photo.photo_id 

내가 필요 comment_type을 기반으로 한 사진 표의 올바른 입력란 가능한 것은 아니지만 내가하고 싶은 것을 보여줍니다.

select *.comments,*.photos 
FROM comments 
CASE 
    when comments.comment_type = 8 then inner join photos on comments.object_id = photo.photo_p_id 
    when comments.comment_type = 17 then inner join photos on comments.object_id = photo.photo_id 

아이디어가 있으십니까?

답변

2

이 쿼리 (편집) 시도 -

SELECT c.*, 
    CASE c.comment_type WHEN 8 THEN p1.photo_p_id WHEN 17 THEN p2.photo_id ELSE NULL END photo_id, 
    CASE c.comment_type WHEN 8 THEN p1.column1 WHEN 17 THEN p2.column1 ELSE NULL END column1 
FROM comments c 
    LEFT JOIN photos p1 
    ON c.object_id = p1.photo_p_id 
    LEFT JOIN photos p2 
    ON c.object_id = p2.photo_id 

또 하나 개의 변형 -

SELECT c.*, p.* 
FROM comments c 
    JOIN photos p 
    ON c.comment_type = 8 AND c.object_id = p.photo_p_id OR c.comment_type = 17 AND c.object_id = p.photo_id