Форум: "Прочее";
Текущий архив: 2012.02.19;
Скачать: [xml.tar.bz2];
ВнизJOIN без ON Найти похожие ветки
← →
И. Павел © (2011-10-28 12:04) [0]Здравствуйте.
Насколько допутимой и рекомендуемой является в MS SQL SERVER конструкция:
FROM tab1 AS t1
LEFT JOIN tab2 AS t2 ON 1=1
LEFT JOIN tab3 AS t3 ON t3.id = ...
Т.е. я просто хочу "умножить" две таблицы: t1 и t2. Можно перечислить их через запятую в предложении FROM, но такая конструкция считается устаревшей, да и придется тогда писать вложенный запрос внутри FROM - а это выглядит не так красиво. Но смущает то, что в JOIN обязательно должен быть блок ON, т.е. в синтаксисе не предусмотрено использовать JOIN вхолостую.
Заранее спасибо.
← →
han_malign (2011-10-28 12:09) [1]
> в синтаксисе не предусмотрено использовать JOIN вхолостую.
- предусмотрено - используются все поля с одинаковым именем(/форматом)...
> "умножить" две таблицы: t1 и t2.
-CROSS JOIN
← →
vuk © (2011-10-28 12:11) [2]select
...
from
Table1 t1 cross join
Table2 t2
← →
И. Павел © (2011-10-28 12:23) [3]han_malign, vuk ©, большое спасибо!
← →
Омлет © (2011-10-28 12:41) [4]select * from Table1 t1, Table2 t2;
← →
И. Павел © (2011-10-28 12:57) [5]> [4] Омлет © (28.10.11 12:41)
Спасибо, это тоже вариант.
← →
Труп Васи Доброго © (2011-10-28 14:57) [6]
> Спасибо, это тоже вариант.
Это не "вариант", только Омлет предложил именно умножение независимое от варианта SQL и СУБД
← →
Компромисс (2011-10-28 17:11) [7]Почему CROSS, а не FULL?
← →
И. Павел © (2011-10-31 07:03) [8]> [7] Компромисс (28.10.11 17:11)
> Почему CROSS, а не FULL?
Насколько я понял из справки - full join возхвращает не только inner (что мне нужно) но и по одной записи от каждой таблицы, для которой не нашлось аналога в другой. Т.е. это смешение right+left join. Ну и еще для full join нужно указывать условие.
Вот цитата из википедии:
"FULL OUTER JOIN
К левой таблице присоединяются все записи из правой, соответствующие условию (по правилам inner join), плюс все не вошедшие записи из правой таблицы, поля левой таблицы заполняются значениями NULL и плюс все не вошедшие записи из левой таблицы, поля правой таблицы заполняются значениями NULL"
← →
Anatoly Podgoretsky © (2011-10-31 08:51) [9]> И. Павел (31.10.2011 07:03:08) [8]
А вот из авторитетного источника
FULL OUTER JOIN, which includes all rows from both tables, regardless of
whether or not the other table has a matching value.
И вот оттуда же, но на русском
Логический оператор Full Outer Join возвращает каждую строку,
удовлетворяющую предикату объединения из первого (верхнего) входа и
объединенную с каждой строкой из второго (нижнего) входа. Он также
возвращает строки из:
a.. первого входа, не имеющего соответствий во втором входе;
b.. второго входа, не имеющего соответствий в первом входе.
Вход, не содержащий совпадающих значений, возвращается как значение NULL.
Full Outer Join является логическим оператором.
И никакого требования указания условия. Ты поосторожнее с этой дурипедией
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2012.02.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c