Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
15-1319918066
xayam
2011-10-29 23:54
2012.02.19
Миллионное посещение


15-1319833839
Германн
2011-10-29 00:30
2012.02.19
Кто-нибудь помнит TP 7.0?


11-1241546268
Sem
2009-05-05 21:57
2012.02.19
Временные библиотеки


2-1320786460
I
2011-11-09 00:07
2012.02.19
Компиляция в командной строке


9-1190241696
3DMax
2007-09-20 02:41
2012.02.19
Вопрос по кривым Безье