2012-03-08 2 views
0

Как я могу присоединиться к нескольким таблицам, не зависящие от влево или вправо присоединитьсяJOIN - независимо от того,

пример:

t1 
     id | date 
     ----------- 
     NULL NULL 

t2 
     id | value 
     ------------ 
     1 | bla 

SELECT date,value 
FROM t2 LEFT JOIN t1 
    ON t1.id = t2.id where t2.id = 1 

- выберите ОК

с правом присоединиться к такой же доходности запроса нулевые значения ...

ответ

2
SELECT `date`, `value` FROM t2 FULL OUTER JOIN t1 ON t1.id = t2.id 

Edit: Это приведет к возврату всех записей, даже если нет совпадений с этими полями объединения. Извините, это даст вам синтаксическую ошибку. См. Мои изменения ниже.

Если вы хотите только матчи, использовать inner join:

SELECT `date`, `value` FROM t2 INNER JOIN t1 ON t1.id = t2.id 

Edit: Там нет в MySQL нет FULL OUTER JOIN. Вы должны имитировать его с UNION и сочетать LEFT и RIGHTJOIN:

SELECT `date`, `value` FROM t2 LEFT JOIN t1 ON t1.id = t2.id 
UNION 
SELECT `date`, `value` FROM t2 RIGHT JOIN t1 ON t1.id = t2.id 

Это также возвратит ваши NULL значения, но они не будут совпадать, так как NULL != NULL

+0

наконец я смешан присоединяется со столом, где я уверен, что идентификатор существует ... да и полное внешнее соединение не поддерживает в MySQL http://www.xaprb.com/blog/2006/05/26/как к записи полного внешнее_соединение-в-MySQL / – mort

0

Вы должны использовать FULL OUTER JOIN synstax , Фактически Left JOIN возвращает все результаты в левом столбце, тогда как правое соединение возвращает все результаты в правый столбец. SO с полным внешним, оба возвращаются.

SELECT date,value FROM t2 FULL OUTER JOIN t1 ON t1.id = t2.id where t2.id = 1 
Смежные вопросы