powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FULL JOIN
25 сообщений из 43, страница 1 из 2
FULL JOIN
    #39802753
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Нужна помощь, а может и нет 😀.

Пишем на Sql server 2008 отчёты, которые запускаются каждый день. В отчёте требуется объединять несколько таблиц, обычно от 5 до 10. Некоторые берём с другого сервера не MS.
Ситуация, при объединении нескольких таблиц, получается некрасивая картинка. Т.е. если в первой таблице нет каких то данных из второй то я из добавляю через COALESCE, но при последующих соединениях данные не соединяются с данными из второй таблицы и последующими. Я нашел решение только если выделять каждые две соединённые таблицы в отдельный селект. В результате получается кода на 1000 строк, после очень сложно разобраться что к чему.
Может кто то посоветует как можно по другому решить эту проблему.

Спасибо.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802754
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_,

складывайте все однородные данные в одну таблицу
суррогатные ключи
ОЛАП
и вот это вот всё
...
Рейтинг: 0 / 0
FULL JOIN
    #39802756
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример:

Select coalesce(id, t2.id, t3.id ), c1, c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id, c3, c4 from t2) as t2
Full join (select id, c5, c6 from t3) as t3
...
Рейтинг: 0 / 0
FULL JOIN
    #39802757
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Пример:

Select coalesce(id, t2.id, t3.id ), c1, c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id, c3, c4 from t2) as t2
Full join (select id, c5, c6 from t3) as t3
с такими джоинами, чем вас UNION не устраивает?
...
Рейтинг: 0 / 0
FULL JOIN
    #39802759
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Пример:

Select coalesce(id, t2.id, t3.id ), c1, c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id, c3, c4 from t2) as t2
Full join (select id, c5, c6 from t3) as t3

это какой то кросс джоин.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802790
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В FULL JOIN обязательно должно быть условие ON.
Показанный SELECT неработоспособен.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802811
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый.
А разве union не присоединение снизу? Потому что мне надо после с этими данными производить математические вычисления типа с1 / с3 * 100
...
Рейтинг: 0 / 0
FULL JOIN
    #39802816
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый.
так у вас проблема то скорее всего именно в той части, которую вы не написали.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802821
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый.

Все поля должны иметь один тип, размер, и порядок.
При соединении нескольких разносортных, по разному обслуживаемых баз,
обязательно через некоторое время вылезет несоответствие.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802823
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый.
А разве union не присоединение снизу? Потому что мне надо после с этими данными производить математические вычисления типа с1 / с3 * 100
как у вас найдётся время, опишите что не так, а мы пока погадаем
...
Рейтинг: 0 / 0
FULL JOIN
    #39802827
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKа мы пока погадаем
ну если включен режим гаданий, то ставлю на то, что у него
Код: sql
1.
2.
3.
4.
5.
select ...
from t1 
full join t2 on t2.id = t1.id
full join t3 on t3.id = t1.id
...


это объяснило бы
Lomaster_но при последующих соединениях данные не соединяются с данными из второй таблицы и последующими
...
Рейтинг: 0 / 0
FULL JOIN
    #39802835
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Select coalesce(id, t2.id, t3.id ), c1, c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1

Ни разу не пользовался coalesce в таком режиме, но правильно я понимаю,
что если t1.id - пустой,
то берется первый id из t2,
а если и он пустой, то первый id из t3
...
Странно всё это.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802838
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183что если t1.id - пустой,
то берется первый id из t2,
а если и он пустой, то первый id из t3

Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802844
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное не очень хороший пример был.

Код: sql
1.
2.
3.
4.
5.
6.
Select
    id1, id2, id3, t1.c1, t1.c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id1, id2, id3, c3, c4 from t2) as t2
on t1.id1=t2.id1 and t1.id2=t2.id2 and t1.id3=t2.id3
full join (select id1, id2, id3, c5, c6 from t3) as t3
on t1.id1=t3.id1 and t1.id2=t3.id2 and t1.id3=t3.id3



Вот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки.

А так нет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select id1, id2, id3, t1.c1, t1.c2, t1.c3, t1.c4, t3.c5, t3.c6
from (
    Select id1, id2, id3, t1.c1, t1.c2, t2.c3, t2.c4 from t1 ... Условия
    Full join (select id1, id2, id3, c3, c4 from t2 ... Условия) as t2
    on t1.id1=t2.id1 and t1.id2=t2.id2 and t1.id3=t2.id3
) As t1
full join (select id1, id2, id3, c5, c6 from t3 ... Условия) as t3
on t1.id1=t3.id1 and t1.id2=t3.id2 and t1.id3=t3.id3



Тут только 3 таблицы а если их 10...
...
Рейтинг: 0 / 0
FULL JOIN
    #39802845
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Наверное не очень хороший пример был.

Код: sql
1.
2.
3.
4.
5.
6.
Select
    id1, id2, id3, t1.c1, t1.c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id1, id2, id3, c3, c4 from t2) as t2
on t1.id1=t2.id1 and t1.id2=t2.id2 and t1.id3=t2.id3
full join (select id1, id2, id3, c5, c6 from t3) as t3
on t1.id1=t3.id1 and t1.id2=t3.id2 and t1.id3=t3.id3




Вот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки.

А так нет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select id1, id2, id3, t1.c1, t1.c2, t1.c3, t1.c4, t3.c5, t3.c6
from (
    Select id1, id2, id3, t1.c1, t1.c2, t2.c3, t2.c4 from t1 ... Условия
    Full join (select id1, id2, id3, c3, c4 from t2 ... Условия) as t2
    on t1.id1=t2.id1 and t1.id2=t2.id2 and t1.id3=t2.id3
) As t1
full join (select id1, id2, id3, c5, c6 from t3 ... Условия) as t3
on t1.id1=t3.id1 and t1.id2=t3.id2 and t1.id3=t3.id3




Тут только 3 таблицы а если их 10...

ну так добавляйте coalesce в условия соединения
...
Рейтинг: 0 / 0
FULL JOIN
    #39802847
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_,

авторВот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки.

а по каким условиям связаны t2 и t3?
...
Рейтинг: 0 / 0
FULL JOIN
    #39802856
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель,

Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀
...
Рейтинг: 0 / 0
FULL JOIN
    #39802864
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

У всех трёх есть одинаковые поля id1 id2 id3 но разные данные.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802865
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Посетитель,

Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀

вам просто лень проверять.

Код: sql
1.
2.
3.
4.
5.
6.
Select
    id1, id2, id3, t1.c1, t1.c2, t2.c3, t2.c4, t3.c5, t3.c6 from t1
Full join (select id1, id2, id3, c3, c4 from t2) as t2
on t1.id1=t2.id1 and t1.id2=t2.id2 and t1.id3=t2.id3
full join (select id1, id2, id3, c5, c6 from t3) as t3
on coalesce(t1.id1,t2.id1)=t3.id1 and coalesce(t1.id2,t2.id2)=t3.id2 and coalesce(t1.id3,t2.id3)=t3.id3



Зы. не люблю почему-то, когда поля присоединяемой таблицы указывают справа.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802867
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_TaPaK,

У всех трёх есть одинаковые поля id1 id2 id3 но разные данные.
и где это в предикатах обозначено?
...
Рейтинг: 0 / 0
FULL JOIN
    #39802869
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex982183что если t1.id - пустой,
то берется первый id из t2,
а если и он пустой, то первый id из t3
Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями.
Оно понятно, но что автор мел в виду, когда подставлял id из других таблиц?
И что возьмет coalesce в этом случае?
...
Рейтинг: 0 / 0
FULL JOIN
    #39802871
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183msLexпропущено...

Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями.
Оно понятно, но что автор мел в виду, когда подставлял id из других таблиц?
И что возьмет coalesce в этом случае?
всё нормально возьмёт, общий ключ id
...
Рейтинг: 0 / 0
FULL JOIN
    #39802872
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял. Автор доупрощался до нечитабельности.
...
Рейтинг: 0 / 0
FULL JOIN
    #39802875
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вру. Это я спьяну вместо Full join увидел union all
...
Рейтинг: 0 / 0
FULL JOIN
    #39802876
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель,

Это именно то что нужно. Я просто не правильно понял, где использовать COALESCE.


Большое спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FULL JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]