2013-06-21 6 views
0

У меня есть следующий MySQL таблица:MySQL LEFT JOIN только на некоторых строках?

enter image description here

На этой таблице, я хочу LEFT JOIN другой таблицы, но только к строкам с action == 2 или action == 3. Возможно ли это с помощью одного SELECT путем указания части LEFT JOIN или мне нужно сделать больше SELECT и UNISON?

EDIT: Строки с действием = 1 могут просто содержать значения NULL из LEFT JOIN.

ответ

3
SELECT ... 
FROM sometable 
LEFT JOIN jointable ON (sometable.field = jointable.field AND (action IN (2,3))) 

Вы можете иметь произвольную логику в условиях JOIN. Все, что он должен сделать в конце, сводится к истинному/ложному значению. Если результат верен, объединение будет успешным, и объединенные поля будут включены. если результат является ложным, то соединение не происходит для этой конкретной комбинации строк.

+0

Удивительное решение и объяснение! Это должно быть то, что я ищу. Я собираюсь попробовать это сейчас. –

+0

Почему так много круглых скобок? – Ziul

+1

@ziul: Я всегда в явном виде в скобках. Таким образом, мне не нужно пытаться запоминать правила приоритета для любого языка, на котором я работаю, - скобки применяют предикат ** MY **. –

1
SELECT * FROM table AS t LEFT JOIN another_table AS at ON t.id = at.id WHERE t.action = 2 OR t.action = 3 

Не дает вам результата, который вы ищете?