Вопрос про LEFT JOIN и попытку избавиться от него

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Вопрос про LEFT JOIN и попытку избавиться от него

Сообщение Kotъ-Begemotъ » 13 фев 2008, 08:55

А вот я тут подумал на такую тему:
Есть запрос с объединением по JOIN. К двум таблицам. Поле из второй таблицы, фигурирующее в выборке может быть NULL. То есть в выборку не попадёт если только LEFT JOIN не задать. То есть:

Код: Выделить всё

SELECT UN.UNITID, UN.UNITNAME, OD.FLAT
FROM UNITS UN
 LEFT JOIN ORDERS OD
  ON (OD.DRIVERID = UN.UNITID)
Квартира не обязательно задана, может быть без неё. Поэтому чтобы получить полные данные ставим LEFT JOIN Пример надуманный, для простоты.

Но с другой стороны что будет если сделать вот так:

Код: Выделить всё

SELECT UN.UNITID, UN.UNITNAME, COALESCE(OD.FLAT, 'НЕТУ_НИФИГА')
FROM UNITS UN
 JOIN ORDERS OD
  ON (OD.DRIVERID = UN.UNITID)
?!? Как это будет работать? Запрос к реальным данным делал - что-то не понял нифига - количество записей меньше чем в первом запросе, но с другой стороны присутствуют строки с "НЕТУ_НИФИГА" ?!? При такой конструкции будут "теряться" записи или нет? Это я к тому, что может в подобных случаях удастся таким "финтом" избавится от LEFT JOIN в пользу внутреннего JOIN ?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 09:50

ты все-таки не читал www.ibase.ru/devinfo/joins.htm

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Вопрос про LEFT JOIN и попытку избавиться от него

Сообщение WildSery » 13 фев 2008, 14:45

Букварь, срочно!

Ответить