나는이 쿼리 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 ...