MySQL은 조인되는 테이블의 선택은 소스 테이블의 데이터를 기반에서 가입

마틴 :

나는이 쿼리 A는 설명하기 어려운 비트 찾을; 내가 가진 unfamilar있어 일부 간결한 문구 아마이있다.

TL / DR :

어떻게 소스 테이블 데이터에 따라 가입 할 테이블을 선택하는 SQL 쿼리를 설정하는 방법?

나는의 테이블이 있습니다 events. 각 이벤트가 4의 하나에 관한 것이다 topics; 원래의 데이터는 하나였다 topic그렇게 간단한 1 : 1에 나타난 관계였다.

그러나 클라이언트는 이제 네 가지 주제로 이벤트를 연장하고 싶어;

그래서:


가능한 주제 (각각 자신의 테이블이 있습니다)

holidays | cruises | recruitment | fundays 

예를 들면 :

holidays

    id     | holiday_name    | other data....
------------------------------------------------
    1      | basic holiday   | ..etc..
    2      | alpaca training | ..etc..  

fundays

    id     | funday_title    | other data....
------------------------------------------------
    1      | balloons!       | ..etc..
    2      | seaweed fun!    | ..etc..  

이벤트 데이터의 주요 소스는 이벤트 테이블;

이벤트 표

event_id | reference_id | topic_type (ENUM) | event_name | other data.....
--------------------------------------------------------------
    1    |       1      |      hol          |  something |  ....
    2    |       4      |      cruise       |  some name |  ....
    3    |       1      |      funday       |   horses!  |  ....
    4    |       2      |      hol          |  whatever  |  ....

그래서 각각의 이벤트는 참조 테이블 (가 topic_type)와 참조 ID ( reference_id해당 테이블을).

나는의 제목 싶어 어디 위치에 지금이다 holidays/ cruises/ recruitment/ fundays각 관련된 이벤트 . 는 SQL이 될 것이다, 그래서 나는 이벤트 ID가 :

SELECT event_name, etc... FROM events WHERE event_id = 1 

그러나 나는 또한 같은 쿼리 주제의 이름을 검색 할;

내가 좋아하는 뭔가를 시도 이 Q & A를 :

SELECT events.event_name, other_table.
FROM events 
CASE 
LEFT JOIN holidays other_table ON events.topic_type = 'hol' AND events.reference_id = other_table.id
WHERE events.event_id = 1

나는 문제가 발생할 경우 그리고 여기에있다; 나는 테이블 가입 기준을 동적으로하는 방법을 모르겠어요.

나는 출력이 도달 할 수없는 테이블에 대한 참조가 될 것으로 기대; 내가 사용하는 경우 CASE열 기준에 따라 가입 할 테이블을 선택 후, 나는 선택이 항상 문제를 제기합니다 유효하지 않은 정도입니다 3 표 참조를 참조한다 직시하다.


나는로 출력을하고 싶습니다 :

SELECT events.event_name, events.event_id, other_table.____ as topic_name ....

그래서 SQL 결과가 될 수있다 :

EVENT_ID = 1

  event_id | event_name | topic_name
 ------------------------------------------------------------
      1    |  something | basic holiday

EVENT_ID = 2

   event_id | event_name | topic_name
------------------------------------------------------------
       2    | some name  | cruise Holiday title no.4

EVENT_ID = 3

  event_id | event_name | topic_name
 ------------------------------------------------------------
      3    |   horses!  |  balloons!
  • 이게 가능해?
  • 이것은 어떻게 할 수 있는가?

여기에 보았다 :

그러나이 모두가 할 수없는 것을 나 자신의 sitations가 같은 테이블에서 다른 열 것을이 될 것 같다

아키나 :
SELECT m.field,
       COALESCE(s1.field, s2.field, s3.field, s4.field) AS field,
       ...
FROM main_table m
LEFT JOIN slave1_table s1 ON ...
LEFT JOIN slave2_table s2 ON ...
LEFT JOIN slave3_table s3 ON ...
LEFT JOIN slave4_table s4 ON ...

추천

출처http://10.200.1.11:23101/article/api/json?id=6146&siteId=1