Вызывает ли это декартово соединение, если вы включаете таблицу, из которой ничего не выбрано?

Будет ли это декартовым соединением:

select
dog_t.type
dog_t.breed
date_t.date
from
dog_t,
cat_t,
date_t
where
dog_t.date_key=date_t.date_key

Приведет ли включение таблицы cat_t к декартовому соединению... потому что она ни с чем не соединена?


person tylercomp    schedule 13.02.2013    source источник
comment
См. этот вопрос для получения дополнительной информации: stackoverflow.com/q/14780307/11683   -  person GSerg    schedule 13.02.2013


Ответы (1)


да. Вам нужно добавить cat_t.date_key=date_t.date_key, чтобы избежать декартова соединения.

Но у вас все еще есть проблема перекрестного соединения с таблицами cat_t и dog_t. Я бы сказал, что вы должны объединить отдельный выбор из каждой таблицы.

person Helio Santos    schedule 13.02.2013
comment
Это чисто гипотетический пример. Наверное, я просто не понимаю, почему происходит декартово... неужели sql просто буферизует поля, которые ему не нужны? - person tylercomp; 13.02.2013
comment
@tylercomp Я понимаю твою точку зрения. Но разве вам это не нужно? Представьте, если по какой-то темной причине вам нужна информация cat_t, неявная в результатах (добавление избыточных вхождений строк cat_t) - person Helio Santos; 13.02.2013
comment
Да, это определенно плохая практика, мне просто любопытно, что это на самом деле вызывает декартово соединение. Немного помогает мне понять, как sql работает внутри. Спасибо, я ценю ответ! - person tylercomp; 13.02.2013
comment
Две таблицы в запросе вызовут декартово соединение, поэтому вам нужно добавить условие. Я пытаюсь сказать, что декартовы соединения - это то, как работает sql. - person Helio Santos; 13.02.2013