2015-06-12 3 views
0

Я посмотрел на другие связанные вопросы, но они не могли нажать на меня.Full Outer Join (объединение влево влево справа) Несколько таблиц MySQL

У меня есть эти таблицы: http://i.stack.imgur.com/cEYVn.png

В конце концов, я хотел бы объединить эти 5 таблиц так все от места (возможно loc_type (интермедиат) заменяется loc_type_name), все, кроме LOC_ID от часов (с он будет присоединен на LOC_ID), то же самое с праздником и т.д.

Я уже знал, как повторить эту функцию в MySQL:

SELECT * FROM t1 
LEFT JOIN t2 ON t1.id = t2.id 
UNION 
SELECT * FROM t1 
RIGHT JOIN t2 ON t1.id = t2.id 

Я получил это работает для любых двух таблиц, но не мог» T далее:

SELECT * FROM locations loc 
    LEFT OUTER JOIN location_types locType on locType.id = loc.loc_num 
UNION 
SELECT * FROM locations loc 
    RIGHT OUTER JOIN location_types locType on locType.id = loc.loc_num 
UNION 
SELECT * FROM locations loc 
    LEFT OUTER JOIN hours shours on loc.loc_num = shours.loc_id 
UNION 
SELECT * FROM locations loc 
    RIGHT OUTER JOIN hours shours on loc.loc_num = shours.loc_id 
UNION 
SELECT * FROM locations loc 
    LEFT OUTER JOIN holiday hol on loc.loc_num = hol.loc_id 
UNION 
SELECT * FROM locations loc 
    RIGHT OUTER JOIN holiday hol on loc.loc_num = hol.loc_id 

Любая помощь будет оценена!

Примечание: Там могут быть некоторые дополнительные столбцы для расположения и других таблиц, так что в конце концов, я хотел бы, в котором я передам выбрать столбцы желательные (т.е. от места расположения выберите LOC_ID, loc_name, loc_phone) ...

+0

Это могло бы помочь, если бы вы включили инструкцию 'full external join' (хотя MySQL ее не поддерживает). Кроме того, зачем вам нужно «полное внешнее соединение»? В хорошо продуманной базе данных ссылки на внешние ключи должны быть действительными, поэтому «полное внешнее соединение» редко требуется. –

+0

Я использую php для отображения местоположения, его часов и остальной части данных, а предыдущий программист повторно вызывал базу данных несколько раз для каждого местоположения. Я хотел бы вызвать базу данных один раз (если не произойдет изменение) и сохранить данные в массиве, чтобы сделать веб-страницу намного быстрее. –

+0

Любые предложения? –

ответ

0

Просто взгляните на запрос ниже, Надеюсь, это может вам помочь! Позже вы можете соответствующим образом изменить.

Это присоединится ко всем 5 столам. Здесь я оставил местоположение как левую таблицу, так что все местоположения будут отображаться после запуска этого запроса, и соответствующий идентификатор будет сопоставлен с этой таблицей.

SELECT * FROM location LEFT JOIN location_type ON location_type.type_id=location.loc_id 
    LEFT JOIN hours ON location.loc_id=hours.loc_id 
    LEFT JOIN holiday ON holiday.loc_id=location.loc_id 
    LEFT JOIN holiday_hours ON holiday.hol_id=holiday_hours.holiday_id 
+1

Я решил пойти другим путем, но так как ваше решение помогло бы мне начать, я приму свой ответ. Благодаря! –