Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Добрый день, Есть две таблицы, одна основная (indicator), а другая содержит только комментарии (indicator_comment). Поскольку коментарии очень большие, они помещены в отдельную таблицу. Если делать простой джоин, то запрос ниже выдает 92 записи: Код: sql 1. 2. 3. 4. 5. 6. Здесь pkey - это ключ по которому партицированны обе таблицы. Поскольку не все индикаторы имеют комментарий, то напрашивается "left join", но стоит изменить запрос на Код: sql 1. 2. 3. 4. 5. 6. запрос начинает возвращать все 40 миллионов записей игнорируя фильтры в виде pkey и Id студента. А должно быть всего 105 записей. Что я делаю не так? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:21 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Roust_m, может фильтр в where перенести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:33 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
andy stRoust_m, может фильтр в where перенести? В этом случае запрос возвращает 92 записи, а не 105 как без джоина: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:43 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Roust_m, Код: sql 1. может в секцию on ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:53 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Roust_m, А если убрать c.pkey = 13717 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:53 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Massa52Roust_m, А если убрать c.pkey = 13717 Если это убрать или перенести в секцию "on", то все работает. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 07:59 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Roust_mстоит изменить запрос на Код: sql 1. 2. 3. 4. 5. 6. запрос начинает возвращать все 40 миллионов записей игнорируя фильтры в виде pkey и Id студента.Так нельзя писать запросы. Если там простой джой, то сервер выправлят эту корявость, но с left начинаются чудеса ("чудеса" для разработчика, так то по логике всё правильно, и должно показываться "все 40 миллионов") Нужно всегда в условии джойна (ON ...) писать только условие связывания таблиц, а в условии where условия фильтрации для основной части запроса (до JOIN) Получается, по сути, изложение логики связывания в бизнес-терминах. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 10:10 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Нужно всегда в условии джойна (ON ...) писать только условие связывания таблиц, а в условии where условия фильтрации для основной части запроса (до JOIN)Не всегда. Если связка нужна не для всех записей справочника, а только для некоторых, то фильтр по справочнику нужно делать именно в ON , т.к. фильтр в WHERE раст. нерабочий (пустой) запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 10:42 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
alexeyvgНужно всегда в условии джойна (ON ...) писать только условие связывания таблиц, а в условии where условия фильтрации для основной части запроса (до JOIN) нет. условие на правую таблицу как раз и надо писать в on. иначе left join выродится в inner join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 10:47 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Yasha123alexeyvgНужно всегда в условии джойна (ON ...) писать только условие связывания таблиц, а в условии where условия фильтрации для основной части запроса (до JOIN) нет. условие на правую таблицу как раз и надо писать в on. иначе left join выродится в inner join я, иногда, в таких случаях использую Код: sql 1. 2. 3. 4. 5. 6. 7. особенно, если "слева" нужно подцепит 2 таблицы, связанные между собой через inner join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 12:41 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
msLex, а конcтрукция ? ... JOIN a ... JOIN b ON a.. = b... ON a.... = .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 12:44 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
TaPaKmsLex, а конcтрукция ? ... JOIN a ... JOIN b ON a.. = b... ON a.... = .. как то не прижилось, сложнее для понимания. можете, ради интереса, среди своих (на работе) провести "соц опрос"- что будет при такой конструкции, и при outer apply и я, почему-то, уверен, что с outer apply справится больше чем on ... on ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 12:54 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
msLexTaPaKmsLex, а конcтрукция ? ... JOIN a ... JOIN b ON a.. = b... ON a.... = .. как то не прижилось, сложнее для понимания. можете, ради интереса, среди своих (на работе) провести "соц опрос"- что будет при такой конструкции, и при outer apply и я, почему-то, уверен, что с outer apply справится больше чем on ... on ... ну обычно проще заходит просто Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 12:59 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Roust_m, Попробуйте Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 13:10 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Yasha123alexeyvgНужно всегда в условии джойна (ON ...) писать только условие связывания таблиц, а в условии where условия фильтрации для основной части запроса (до JOIN) нет. условие на правую таблицу как раз и надо писать в on. иначе left join выродится в inner joinТак это условие джойна, по сути. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2019, 22:27 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
alexeyvgYasha123пропущено... нет. условие на правую таблицу как раз и надо писать в on. иначе left join выродится в inner joinТак это условие джойна, по сути. т. е. если есть условие на левую таблицу, то это "фильтр", а на правую, так это сразу "условие соединения"? комментарии со студентами связаны по ид. больше никак. это и есть "условие соединения". теперь хочу записи только со студентами на букву "а", это уже фильтр. а теперь из них хочу только тех, у кого в комментарии не написано "двоечник", и это уже вдруг не фильтр? в ФК еще посоветуйте это засунуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 12:45 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Yasha123а теперь из них хочу только тех, у кого в комментарии не написано "двоечник", и это уже вдруг не фильтр?Конечно, не фильтр. Если вы это засовываете в where, и фильтруете результат запроса, показывая только студентов, у которых в комментарии не написано "двоечник", то это фильтр. А вот если это пишется в условии соединения, после ON, то вы не фильтруете студентов, вы фильтруете присоединяемые комментарии, то есть логично это называть условиями соединения. Это всё, понятное дело, ненаучно, но это вполне нормальная терминология логики данных, логики запроса. Впрочем, в документации это называется "join condition", так что, может, моя терминология не так уж "ненаучна". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 19:13 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
alexeyvgYasha123а теперь из них хочу только тех, у кого в комментарии не написано "двоечник", и это уже вдруг не фильтр?Конечно, не фильтр . ... А вот если это пишется в условии соединения, после ON, то вы не фильтруете студентов, вы фильтруете присоединяемые комментарии , то есть логично это называть условиями соединения. вы сами себы надули. сначала спорите со мной и пишете, что это не фильтр, и тут же строкой ниже признаете, что это именно фильтр на правую таблицу. ну т. е. повторяете ровно мои слова ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 21:08 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
alexeyvgЕсли вы это засовываете в where, и фильтруете результат запроса, показывая только студентов, у которых в комментарии не написано "двоечник", то это фильтр. и вот это тоже неверно. у меня на потоке всего 2 двоечника, и будьте уверены, каждому двоечнику я влепляю соответствующий комментарий. так вот, моя бизнес-логика просит: выдайте мне всех тех, кто не двоечник. вы засовываете это в where, "показывая только студентов, у которых не написано", и получаете просто неверный результат. пустой результат. хотя у меня из 100 студентов 98 должны были высветиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 21:38 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
потому что именно у 98 как раз и "не написано". у двоечников написано и они отсеялись. а у 98 не написано вообще ничего. просто потому, что остальным преподам было лень писать, таким образом комментариев всего 2,оба мои ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 21:49 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Yasha123alexeyvgпропущено... Конечно, не фильтр . ... А вот если это пишется в условии соединения, после ON, то вы не фильтруете студентов, вы фильтруете присоединяемые комментарии , то есть логично это называть условиями соединения. вы сами себы надули. сначала спорите со мной и пишете, что это не фильтр, и тут же строкой ниже признаете, что это именно фильтр на правую таблицу. ну т. е. повторяете ровно мои словаВы же так не фильтруете студентов, вы фильтруете комментарии. Я называю это условием соединения. Вы же просто к словам придираетесь, да? Я человеку объясняю так, что бы он не писал такой ужас, как в начале темы: Код: sql 1. 2. 3. 4. 5. 6. Для этого моё объяснение, что является фильтром, а что условием соединения, и как описание бизнес-логики от начальника положить на SQL, ИМХО достаточно понятное и удобное. А вы начинаете про FK; вы ещё вспомните про нормальные формы, и про нотации IDEF1X и IE. Зачем это всё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 22:18 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
Yasha123alexeyvgЕсли вы это засовываете в where, и фильтруете результат запроса, показывая только студентов, у которых в комментарии не написано "двоечник", то это фильтр. и вот это тоже неверно. ... и получаете просто неверный результат. И? Что вы хотели сказать? Вы же поняли, что я имел в виду? Я же не решал "задачу", и не делал проект для ВУЗа на заказ, какая разница в этом топике, покажутся двоечники, или не-двоечники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2019, 22:23 |
|
||
|
Что-то лыжи не едут (соединение двух партицированных таблиц)
|
|||
|---|---|---|---|
|
#18+
alexeyvgВы же так не фильтруете студентов, вы фильтруете комментарии. Я называю это условием соединения. Вы же просто к словам придираетесь, да? к словам придираетесь вы. именно что это "фильтр на комментарии", т. е. на правую таблицу. и вы прицепились к этой моей формулировке и все никак не отцепитесь, причем через раз в своем упорстве вы сами ее же и используете. не пойму, чего вы добиваетесь, продолжайте в тои же духе, но без меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2019, 18:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39865105&tid=1687245]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 347ms |

| 0 / 0 |
