RSS
 

MySQL OUTER JOIN

К сожалению, в MySQL нет на данный момент оператора OUTER JOIN. Но иногда эта конструкция очень необходима, чтобы избежать выражений типа:
... WHERE `filed_name` NOT IN ()

Но, к счастью выход есть. Далее я опишу, как я эмулировал эту команду. Пусть у нас есть 2 таблицы t1, t2

table t1
id | name

table t2
t_id | some_data

И нам нужно выбрать все записи из t1 с такими id, которые не содержатся в t2.t_id
Запрос в лоб будет выглядеть следующим образом:
SELECT * FROM t1 WHERE id NOT IN (SELECT t_id FROM t2)
Но он будет довольно-таки тяжел, т.к. для каждой записи t1 будет просматриваться не менее O(log(N)) записей из t2.

Я эмулировал эту команду следующим образом:

SELECT t1.*, t2.DATA AS dat FROM
  t1 LEFT JOIN t2
 ON t1.id=t2.t_id
WHERE dat IS NULL

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