Informix запрос странностей - PullRequest
       6

Informix запрос странностей

2 голосов
/ 01 сентября 2010

Я выполняю 2 запроса к базе данных Informix. Запросы затрагивают 4 разные таблицы с внутренними и внешними объединениями. Я думал, что они оба должны возвращать одинаковый набор результатов, но я получаю разницу в 3 записи. Два запроса показаны ниже:

запрос 1 (возвращает 65 строк) -

 select ...  
    from table1, table2, outer table3, outer table4
   where table1.id = table2.id
     and table1.id = table3.id
     and table1.id = table4.id 
     and .....

запрос 2 (возвращает 62 строки) -

select ....
from table1 inner join table2 on table1.id = table2.id
left outer join table3 on table1.id = table3.id
left outer join table4 on table1.id = table4.id
where .....

Кто-нибудь знает, почему эти 2 возвращают разные наборы результатов? Я предположил, что изменение внутреннего соединения / левого внешнего соединения вместо использования внешнего (и ничего для внутреннего соединения) даст те же результаты.

1 Ответ

2 голосов
/ 01 сентября 2010

Содержание предложений WHERE, вероятно, является фактором в этом. Первая нотация, нотация соединения OUTER в стиле Informix, является нестандартной и имеет довольно своеобразную семантику (это вежливо). Второе обозначение - это стандарт ISO OUTER JOIN, в котором прописана семантика.

При объединении в стиле Informix все строки из пары таблиц с внутренним объединением, которые выдерживают любые фильтры в предложении WHERE и находятся только в их столбцах, будут возвращены в наборе результатов. Если в предложении WHERE есть фильтры для столбцов во внешних соединенных таблицах или между внутренними таблицами и внешними таблицами, то эти фильтры могут исключить некоторые возможные строки из набора результатов, но соединенная с внутренним элементом часть результата все еще появляются расширенные с нулями. Это мучительно сложно объяснить. Это более или менее имеет смысл, но результат не просто проекция ограничения базового набора объединений .

Можете ли вы подтвердить, что предложения WHERE содержат некоторые условия для столбцов в table3 и table4?

Не существует тривиального способа моделирования OUTER-соединения в стиле Informix с помощью стандартной записи ISO OUTER JOIN.

...