2012-03-18 1 views
0

(ID, 필드 1, other_table_id)가 쉽게 만들려면 표 2 (ID, 필드 1) 및 표 3 (ID, 필드 1). table1에 대한 SELECT가 있지만 field1 = 2 또는 3의 값에 따라 테이블 2 또는 3 ...과 조인해야합니다 (other_table_id는 table2 또는 table3의 ID입니다).MySQL : 필드 값에 따라 쿼리 - 쿼리를 작성하는 데 도움이 될 수 있습니까?

사례로 CASE를 사용할 수 있습니까? 그렇지 않다면 최선을 다 할 수 있습니까? 하나의 쿼리에서이 작업을 수행 할 수 있습니까?

미리 감사드립니다.


PS :이 비슷한 주제라고 생각합니다 : MySQL query where JOIN depends on CASE하지만이 솔루션을 이해하지 못했다. ypercube, 답변 주셔서 감사합니다 : 또한, 나는


편집 ... MySQL은 (http://dev.mysql.com/doc/refman/5.0/en/case-statement.html)에서 CASE를 사용하는 방법을하지 않습니다! 미안 해요. 구조가 완벽하지 않다고 설명 했어요. 사실, 표는 다음과 같다 :

표 : 아이디, assigned_to는 ASSIGNED_ID rooms_assigned : 아이디, objects_id는 객체 room_type_id : 아이디, ... 그래서

을, 나는 PHP의 $의 OBJECT_ID에서 개체 ID가 , 그래서 이것을 어떻게 쿼리의 WHERE에 사용합니까? 나는 내가 "WHERE"나 자신에 대한 질문을 해결할 생각 :

SELECT COALESCE (ra.objects_id, o.id) AS objects_id 
FROM table1 as t 
LEFT JOIN rooms_assigned AS ra 
ON (ra.id,2)=(t.assigned_id,t.assigned_to) 
LEFT JOIN objects AS o ON (o.id,3)=(t.assigned_id,t.assigned_to) 

WHERE ? 

EDIT 2?

답변에 따르면, 권리 쿼리는 다음과 같을 것이다. 나는 단순히 쿼리 문에서 WHERE를 사용하지 않았지만 ON (ra.id, ra.object_id, 2) = (t.assigned_id, ". $ object_id.", t.assigned_to)와 같이 "ON" ...

다시 한 번 감사드립니다. 큰 도움이되었습니다. :)

답변

1

사용이 LEFT 접속과 COALESCE()SELECT 목록 :

SELECT 
    COALESCE(t2.someColumn, t3.someColumn) AS someColumn 

FROM 
     table1 AS t 
    LEFT JOIN 
     table2 AS t2 
      ON (t2.id, 2) = (t.other_table_id, t.field1) 
    LEFT JOIN 
     table3 AS t3 
      ON (t3.id, 3) = (t.other_table_id, t.field1) 
+0

당신이 당신의 대답을 ypercube 감사합니다, 그것은 매우 큰하고 이해하기 쉽습니다! 그러나, 나는 내가 이것을 어떻게 구현할 것인가? (위의 편집 참조)가 필요하다는 것을 잊었다. 고맙습니다! – Chris

+0

감사합니다, ypercube, 제 생각에 저는 제 자신을 위해 그것을 해결했다고 생각합니다! :) – Chris