Выборка из нескольких таблиц например через перечисление после оператора from
SELECT * from table1, table2, table3 where table1.id=table2.id и другие условия
Что происходит во время создания временных таблиц, как они суммируются и затем лишь происходит выборка? Лучше с этой позиции использовать join?
Спустя 12 часов, 12 секунд (22.07.2010 - 07:50) Kuzya написал(а):
Если я не ошибаюсь, то при грамотном подходе (без SELECT * всяких) оба варианта одинаково ресурсозатратны.
Спустя 1 час, 18 минут, 32 секунды (22.07.2010 - 09:08) sergeiss написал(а):
SELECT * from table1, table2, table3 where table1.id=table2.id и другие условия
на самом деле, это и есть JOIN, один из его вариантов (CROSS JOIN)

Из хэлпа по Постгре:
Цитата |
FROM T1 CROSS JOIN T2 is equivalent to FROM T1, T2. It is also equivalent to FROM T1 INNER JOIN T2 ON TRUE (see below) |
И это не специфика Постгре! То же самое во всех БД. То есть, указанная тобой форма записи - просто упрощенный вариант "кросс-джойна".
При таком джойне происходит объединение строк "каждая с каждой", при этом ты указал условие, ограничивающее выборку. Без этого условия будет реально сделано очень много строк.
PS. А что с производительностью? В чем проблемы - или это не проблемы, а только мысли пока?
Для больших таблиц (миллионы записей) надо использовать некоторые хитровывернутые приёмы, чтобы время выборки было разумным. Вот с этим у меня опыта немало... Так что если есть реальные вопросы - спрашивай.