powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не пойму, либо не знаю
11 сообщений из 11, страница 1 из 1
Не пойму, либо не знаю
    #38684078
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SELECT ...  FROM table1 AS mp
   LEFT JOIN table2 as mc1
          ON mc1.param_id = mp.param_id
   LEFT JOIN table3 AS mc2
          ON mc2.param_id = mp.param_id


Меняя LEFT JOIN местами, должен ли меняться результат, как по мне то нет. Но у меня он меняется.
9.3.4
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684094
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меняться не должен.
Что подразумевается под изменением результата?
Разное количество строк, разные значения в полях, разное (раз пошла такая пьянка) количество полей?

Отмечу, что разный порядок строк не является "изменением результата".
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684108
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rovan,
количество полей по 3-4 в каждой таблице, меняя местами LJ а получаю 't' либо null значения поля из таблицы table2.
Получается если оно идет первым жойном то все ок, если вторым то я теряю его значение, как будто не нашли с чем объединяться
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684156
какабычна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SmeL_mdrovan,
количество полей по 3-4 в каждой таблице, меняя местами LJ а получаю 't' либо null значения поля из таблицы table2.
Получается если оно идет первым жойном то все ок, если вторым то я теряю его значение, как будто не нашли с чем объединяться
"огласите весь список, пжалста"

а то ишь - меняется у них.

давайте полные селекты и наборы данных на входе и выходе

крайний вариант, если всё как написано, - индекс порушен
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684190
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какабычна,
завтра на работе приготовлю все, чтоб можно было воссоздать.
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684664
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,
Запросы уже не воспроизводят, вчерашнюю ситуацию.
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684727
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. хотел воссоздать данную ситуацию в новой базе и она не воспроизводится, на старой все также :), думаю запустив ANALYZE все это пройдет.
Если интересно, то вот Explain-ы
проблемный путь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
"Merge Left Join  (cost=283.10..1080.05 rows=3780 width=1)"
"  Merge Cond: (mp.param_id = mcc.param_id)"
"  Join Filter: (mc.modem_id = 1)"
"  ->  Merge Left Join  (cost=128.97..188.82 rows=3780 width=4)"
"        Merge Cond: (mp.param_id = mc.param_id)"
"        ->  Sort  (cost=45.59..47.17 rows=630 width=2)"
"              Sort Key: mp.param_id"
"              ->  Seq Scan on modem_param mp  (cost=0.00..16.30 rows=630 width=2)"
"        ->  Sort  (cost=83.37..86.37 rows=1200 width=4)"
"              Sort Key: mc.param_id"
"              ->  Seq Scan on modem_config mc  (cost=0.00..22.00 rows=1200 width=4)"
"  ->  Sort  (cost=154.14..159.64 rows=2200 width=3)"
"        Sort Key: mcc.param_id"
"        ->  Seq Scan on modem_customer mcc  (cost=0.00..32.00 rows=2200 width=3)"
тут все ок
Код: plaintext
1.
2.
3.
4.
"Hash Right Join  (cost=24.18..304.23 rows=6930 width=1)"
"  Hash Cond: (mcc.param_id = mp.param_id)"
"  ->  Seq Scan on modem_customer mcc  (cost=0.00..32.00 rows=2200 width=3)"
"  ->  Hash  (cost=16.30..16.30 rows=630 width=2)"
"        ->  Seq Scan on modem_param mp  (cost=0.00..16.30 rows=630 width=2)"
реальный запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
   SELECT mcc.hidden
     FROM modem_param AS mp
LEFT JOIN modem_customer as mcc
       ON (mcc.param_id = mp.param_id)              
LEFT JOIN modem_config AS mc
       ON (mc.param_id = mp.param_id) 

      AND mc.modem_id = 1

...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684739
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,

ну так и меняйте
С
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
  SELECT mcc.hidden
     FROM modem_param AS mp
LEFT JOIN modem_customer as mcc
       ON (mcc.param_id = mp.param_id)              
LEFT JOIN modem_config AS mc
       ON (mc.param_id = mp.param_id) 

      AND mc.modem_id = 1


на
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
  SELECT mcc.hidden
     FROM modem_param AS mp
LEFT JOIN modem_config AS mc
       ON (mc.param_id = mp.param_id) 

      AND mc.modem_id = 1
LEFT JOIN modem_customer as mcc
       ON (mcc.param_id = mp.param_id)              



а не виляйте насчет "эквивалентности", ять
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684746
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,
Тогда объясните пожалуйста отличие, я считал что Ваши два запроса эквивалентны :(
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684855
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_mdqwwq,
Тогда объясните пожалуйста отличие, я считал что Ваши два запроса эквивалентны :(
мои 2 - должны ьбвть. но вы же вроде бы отсnавляете последний AND , и он у вас мигриует в условия соединения то одной то другой таблицы.

о чём я вам и намекнул. Вы последний AND тоже двигали ? Если нет -- то это часть саб-кляузы ON кляузы LEFT JOIN.
...
Рейтинг: 0 / 0
Не пойму, либо не знаю
    #38684882
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не двигал. спасибо
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не пойму, либо не знаю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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