Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нужна помощь, а может и нет 😀. Пишем на Sql server 2008 отчёты, которые запускаются каждый день. В отчёте требуется объединять несколько таблиц, обычно от 5 до 10. Некоторые берём с другого сервера не MS. Ситуация, при объединении нескольких таблиц, получается некрасивая картинка. Т.е. если в первой таблице нет каких то данных из второй то я из добавляю через COALESCE, но при последующих соединениях данные не соединяются с данными из второй таблицы и последующими. Я нашел решение только если выделять каждые две соединённые таблицы в отдельный селект. В результате получается кода на 1000 строк, после очень сложно разобраться что к чему. Может кто то посоветует как можно по другому решить эту проблему. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:24 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_, складывайте все однородные данные в одну таблицу суррогатные ключи ОЛАП и вот это вот всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:29 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Пример: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:29 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
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 не устраивает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:30 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
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 это какой то кросс джоин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:33 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
В FULL JOIN обязательно должно быть условие ON. Показанный SELECT неработоспособен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 13:54 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый. А разве union не присоединение снизу? Потому что мне надо после с этими данными производить математические вычисления типа с1 / с3 * 100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:16 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый. так у вас проблема то скорее всего именно в той части, которую вы не написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:21 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый. Все поля должны иметь один тип, размер, и порядок. При соединении нескольких разносортных, по разному обслуживаемых баз, обязательно через некоторое время вылезет несоответствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:26 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Просто пишу с телефона. Поэтому не дописал селект думал понятно что во всех id должен быть одинаковый. А разве union не присоединение снизу? Потому что мне надо после с этими данными производить математические вычисления типа с1 / с3 * 100 как у вас найдётся время, опишите что не так, а мы пока погадаем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:28 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
TaPaKа мы пока погадаем ну если включен режим гаданий, то ставлю на то, что у него Код: sql 1. 2. 3. 4. 5. это объяснило бы Lomaster_но при последующих соединениях данные не соединяются с данными из второй таблицы и последующими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:32 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
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 ... Странно всё это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:38 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
982183что если t1.id - пустой, то берется первый id из t2, а если и он пустой, то первый id из t3 Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:42 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Наверное не очень хороший пример был. Код: sql 1. 2. 3. 4. 5. 6. Вот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки. А так нет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Тут только 3 таблицы а если их 10... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:49 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Наверное не очень хороший пример был. Код: sql 1. 2. 3. 4. 5. 6. Вот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки. А так нет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Тут только 3 таблицы а если их 10... ну так добавляйте coalesce в условия соединения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:49 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_, авторВот тут если данные есть во второй и третьей таблицах а в первой нет, то они будут как отдельные строки. а по каким условиям связаны t2 и t3? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:53 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Посетитель, Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:02 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
TaPaK, У всех трёх есть одинаковые поля id1 id2 id3 но разные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:06 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Посетитель, Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀 вам просто лень проверять. Код: sql 1. 2. 3. 4. 5. 6. Зы. не люблю почему-то, когда поля присоединяемой таблицы указывают справа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:06 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_TaPaK, У всех трёх есть одинаковые поля id1 id2 id3 но разные данные. и где это в предикатах обозначено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:08 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
msLex982183что если t1.id - пустой, то берется первый id из t2, а если и он пустой, то первый id из t3 Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями. Оно понятно, но что автор мел в виду, когда подставлял id из других таблиц? И что возьмет coalesce в этом случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:12 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
982183msLexпропущено... Нет никаких "первых ID" coalesce не берет, это функция работает не с наборами данных а со значениями. Оно понятно, но что автор мел в виду, когда подставлял id из других таблиц? И что возьмет coalesce в этом случае? всё нормально возьмёт, общий ключ id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:13 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Понял. Автор доупрощался до нечитабельности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:15 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Вру. Это я спьяну вместо Full join увидел union all ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:18 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Посетитель, Это именно то что нужно. Я просто не правильно понял, где использовать COALESCE. Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:18 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Посетитель, Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀 Есть 3 вида соединения разреженных данных: 1. full join - хорошо работает только для 2 таблиц. Дальше уже нечитабельно и количество coalesce зашкаливает 2. union all + group by - неплохо, но читабельность тоже не на высоте особенно когда таблиц с 10 и больше 3. union ключей + left join-ы. Выглядит это так: with all_ids ( select id from table1 union select id from table2 .... union select id from tableN ) select M.id, t1.*, t2.*, .... from all_ids M left join table1 t1 on t1.id = M.id left join table2 t2 on t2.id = M.id .... left join tableN tN on tN.id = M.id ---------------------------------------------------- p.s. и заметьте - ни одного coalesce. p.p.s. когда начинаются более сложные случаи например с соединениями по периодам дат и т.п. - 3-й вариант спасает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 09:00 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, главное что бы выглядело хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 09:02 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
вот и изобрели outer join а мужики в мс то и не не знают select ... from t1 outer join t2 on t2.id=t1.id outer join t3 on t3.id=isnull(t1.id, t2.id) и вообще про coalese где-то видел негатив может отключать параллелизм, если не вру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 08:26 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
dklim.kznвот и изобрели outer join а мужики в мс то и не не знают select ... from t1 outer join t2 on t2.id=t1.id outer join t3 on t3.id=isnull(t1.id, t2.id) и вообще про coalese где-то видел негатив может отключать параллелизм, если не вру и шо, работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 08:29 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
dklim.kznвот и изобрели outer join а мужики в мс то и не не знают select ... from t1 outer join t2 on t2.id=t1.id outer join t3 on t3.id=isnull(t1.id, t2.id) и вообще про coalese где-то видел негатив может отключать параллелизм, если не вру я же говорил - вам лучше скрипты вообще не писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:03 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Посетительdklim.kznвот и изобрели outer join а мужики в мс то и не не знают select ... from t1 outer join t2 on t2.id=t1.id outer join t3 on t3.id=isnull(t1.id, t2.id) и вообще про coalese где-то видел негатив может отключать параллелизм, если не вру и шо, работает? а шо, должно? а зарплата где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:07 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
TaPaKdklim.kznвот и изобрели outer join а мужики в мс то и не не знают select ... from t1 outer join t2 on t2.id=t1.id outer join t3 on t3.id=isnull(t1.id, t2.id) и вообще про coalese где-то видел негатив может отключать параллелизм, если не вру я же говорил - вам лучше скрипты вообще не писать ага, лучше тут на две страницы всяких космических вязок бессмысленных, хотя есть предназначенный для таких случаев инструмент)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:16 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
dklim.kznTaPaKпропущено... я же говорил - вам лучше скрипты вообще не писать ага, лучше тут на две страницы всяких космических вязок бессмысленных, хотя есть предназначенный для таких случаев инструмент)) Тапак, может и тролль, но он фишку рубит, а ты вот просто недостаточно умен, чтобы осознать свой недостаток ума... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:23 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Руслан Дамировичdklim.kznпропущено... ага, лучше тут на две страницы всяких космических вязок бессмысленных, хотя есть предназначенный для таких случаев инструмент)) Тапак, может и тролль, но он фишку рубит, а ты вот просто недостаточно умен, чтобы осознать свой недостаток ума... Вы, видимо, что-то сказать хотели, но не смогли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:31 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
dklim.kznПосетительпропущено... и шо, работает? а шо, должно? а зарплата где? не платят? сочувствую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:34 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Посетительdklim.kznпропущено... а шо, должно? а зарплата где? не платят? сочувствую. ну думаю хотя бы не в моём объеме сочувствия все рубящим фишку на эти две страницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:37 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Ivan DurakLomaster_Посетитель, Это не решит проблемы в первом варианте. А во втором плохо читабельно. Я и спрашиваю есть ли какие механизмы уменьшения кода. Может я чего нибудь не знаю 😀 Есть 3 вида соединения разреженных данных: 1. full join - хорошо работает только для 2 таблиц. Дальше уже нечитабельно и количество coalesce зашкаливает 2. union all + group by - неплохо, но читабельность тоже не на высоте особенно когда таблиц с 10 и больше 3. union ключей + left join-ы. Есть четвертый вариант - вынести всю запутанную логику из запроса в процедуру, которая формирует результат в виде таблицы или рекордсета. Улучшите читабельность за счет декомпозиции сложного запроса, но, вероятно, проиграете в скорости выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 12:26 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийIvan Durakпропущено... Есть 3 вида соединения разреженных данных: 1. full join - хорошо работает только для 2 таблиц. Дальше уже нечитабельно и количество coalesce зашкаливает 2. union all + group by - неплохо, но читабельность тоже не на высоте особенно когда таблиц с 10 и больше 3. union ключей + left join-ы. Есть четвертый вариант - вынести всю запутанную логику из запроса в процедуру, которая формирует результат в виде таблицы или рекордсета. Улучшите читабельность за счет декомпозиции сложного запроса, но, вероятно, проиграете в скорости выполнения. ?????wtf А в процедуре данные магическим образом соберутся??? Ты точно так же и в процедуре будешь вынужден придумывать как тебе собрать разреженные данные, фулл джойном или юнионом. или ты CLR процедуру на C# писать собрался?????? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2019, 08:30 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Lomaster_Здравствуйте. Нужна помощь, а может и нет 😀. Пишем на Sql server 2008 отчёты, которые запускаются каждый день. В отчёте требуется объединять несколько таблиц, обычно от 5 до 10. Некоторые берём с другого сервера не MS. Ситуация, при объединении нескольких таблиц, получается некрасивая картинка. Т.е. если в первой таблице нет каких то данных из второй то я из добавляю через COALESCE, но при последующих соединениях данные не соединяются с данными из второй таблицы и последующими. Я нашел решение только если выделять каждые две соединённые таблицы в отдельный селект. В результате получается кода на 1000 строк, после очень сложно разобраться что к чему. Может кто то посоветует как можно по другому решить эту проблему. Спасибо. Господа великие страдальцы, начните читать книгу "The Data Warehouse Toolkit, Book by Ralph Kimball" и да снизайдет на вас озарение по поводу как это все правильно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2019, 16:38 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
Ivan Durak.Евгенийпропущено... Есть четвертый вариант - вынести всю запутанную логику из запроса в процедуру, которая формирует результат в виде таблицы или рекордсета. Улучшите читабельность за счет декомпозиции сложного запроса , но, вероятно, проиграете в скорости выполнения. ?????wtf А в процедуре данные магическим образом соберутся??? Ты точно так же и в процедуре будешь вынужден придумывать как тебе собрать разреженные данные, фулл джойном или юнионом. или ты CLR процедуру на C# писать собрался?????? ) Мне кажется, что вы не прочли написанное мной, излишне возбудились и стали додумывать нечто странное. Обратите внимание на выделенную фразу. Вам она понятна или я слишком туманно выразился? Тогда я приведу намеренно упрощенное применение варианта: на первом шаге соединяются две таблички в результирующую. Далее последняя соединяется с третьей, четвертой и так далее. На каждом шаге заполняется часть полей. Маленькие запросы, никакой многоуровневой вложенности, легко отлаживать и дорабатывать каждый шаг по отдельности. Я доступно объяснил? P.S. И это не единственное, что можно загнать в процедуру. Я не отвергаю даже экзотики - помянутого вами C# или курсоров (в некоторых случаях результат может оказаться на удивление читабельным). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2019, 17:43 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
.ЕвгенийТогда я приведу намеренно упрощенное применение варианта: на первом шаге соединяются две таблички в результирующую. Далее последняя соединяется с третьей, четвертой и так далее. На каждом шаге заполняется часть полей. Маленькие запросы, никакой многоуровневой вложенности, легко отлаживать и дорабатывать каждый шаг по отдельности. Я доступно объяснил?Вам Ivan Durak вполне доступно объяснил, что процедура - это сохранённый в базе данных код. Который вы можете просто отправить на сервер, не сохраняя в виде процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2019, 19:04 |
|
||
|
FULL JOIN
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Во-первых, мне показалось (могу ошибаться), что Ivan Durak (как и большинство остальных) говорил про варианты запроса. Одного-единственного запроса от источников до результата. А не про скрипт или процедуру. Именно на это я и обращаю внимание. Во-вторых, скрипт (или код) без использования процедур ограничивает возможности реиспользования своих фрагментов. Это имеет непосредственное отношение к читабельности запроса, которой озабочен ТС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2019, 19:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1687923]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 421ms |

| 0 / 0 |
