Size: a a a

Django [ru] #STAY HOME

2019 March 04

DT

Dan Tyan in Django [ru] #STAY HOME
Ihor Dreyev
я бы написал

select A.*, B.* from A join C on A.b = C.b;
a.b.c_field
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
ну это же будет с заходом в таблицу В
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
а если с С в В будет не 1к1поле а ФК,  и мне в on надо дописать ещё условие?
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
select A.*, B.* from A join C on A.b = C.b and C.date > '2019-10-10'::date;
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
ну походу нельзя так?
источник

AK

Artyem Klimenko in Django [ru] #STAY HOME
Ihor Dreyev
select A.*, B.* from A join C on A.b = C.b and C.date > '2019-10-10'::date;
с обычным JOIN нет смысла дописывать условия в ON, вы их с тем же результатом можете вынести в WHERE

но модифицировать условия соединения таблиц в ОРМ джанги нельзя
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Ну смысла писать джоин так то нет, это просто синтаксический сахар, если написать у where условие по которому джоинить - будет сделано то же
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Поэтому это дело вкуса
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Писать в on или в where
источник

AK

Artyem Klimenko in Django [ru] #STAY HOME
Ihor Dreyev
Ну смысла писать джоин так то нет, это просто синтаксический сахар, если написать у where условие по которому джоинить - будет сделано то же
это пока всякие left join не начались, там уже разный результат убдет
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Ну в where можно дописать ещё or A.b_id is null
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Это все делает запрос в бд одним и тем же способом
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
И это не важно
источник

ОК

Омурбек уулу Кайрат in Django [ru] #STAY HOME
django.db.utils.InternalError: could not load library "/usr/local/lib/postgresql/plpgsql.so": dlopen(/usr/local/lib/postgresql/plpgsql.so, 10): Symbol not found: _AllocSetContextCreateExtended
 Referenced from: /usr/local/lib/postgresql/plpgsql.so
 Expected in: /usr/local/opt/postgresql/bin/postgres
in /usr/local/lib/postgresql/plpgsql.so
Весь день протратил не знаю как решить эту проблему
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Как сделать такой запрос с django orm?
источник

ОК

Омурбек уулу Кайрат in Django [ru] #STAY HOME
Омурбек уулу Кайрат
django.db.utils.InternalError: could not load library "/usr/local/lib/postgresql/plpgsql.so": dlopen(/usr/local/lib/postgresql/plpgsql.so, 10): Symbol not found: _AllocSetContextCreateExtended
 Referenced from: /usr/local/lib/postgresql/plpgsql.so
 Expected in: /usr/local/opt/postgresql/bin/postgres
in /usr/local/lib/postgresql/plpgsql.so
Весь день протратил не знаю как решить эту проблему
это когда пытаюсь миграцию запустить
источник

AK

Artyem Klimenko in Django [ru] #STAY HOME
Ihor Dreyev
Ну в where можно дописать ещё or A.b_id is null
ноуп.
смотрите вы соединили две таблицы, для каждой левой части нашлась правая часть, и потом применяете к ним условие в WHERE ограничивающие выборку, это отсеит часть результатов.

если тоже ограничение на вторую таблицу вынести в ON условие, то джойниться уже будет не исходная таблица, а только часть прошедшая фильтр, в результате будут все записи из первой таблицы, но местами будет NULL вместо данных второй таблицы.
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Artyem Klimenko
ноуп.
смотрите вы соединили две таблицы, для каждой левой части нашлась правая часть, и потом применяете к ним условие в WHERE ограничивающие выборку, это отсеит часть результатов.

если тоже ограничение на вторую таблицу вынести в ON условие, то джойниться уже будет не исходная таблица, а только часть прошедшая фильтр, в результате будут все записи из первой таблицы, но местами будет NULL вместо данных второй таблицы.
Это логично, правда, но планировщик работает не так
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Я тоже надеялся что если там ограничить, то будет быстрее и работать будет не так, но работает так
источник

AK

Artyem Klimenko in Django [ru] #STAY HOME
Ihor Dreyev
Это логично, правда, но планировщик работает не так
я не возьмусь говорить за все СУБД
но в постгрешке, в случае OUTER JOIN, указание фильтров в ON и WHERE не тождественно, и используется в том числе намеренно для получения разных результатов
источник