172 похожих чатов

Привет, есть вопрос, может кто помочь?) 1. Нужно чтобы subselect в

родительский select возвращал больше одной колонки (делать через join пока что не получается, через массивы не очень хотелось бы делать)
2. Можно ли избежать дублирования условия возникающего в where и when ? В where оно нужно, чтобы данные выбрались, в when для того, чтобы сделать order by на основании соответствия условиям

select load.id,
(SELECT order_index,
CASE
WHEN point(pgeo.lng, pgeo.lat) <@> point(clp_orig_geo.lng, clp_orig_geo.lat) <= 10 and
dgeo.id = clp.destination_geo_id THEN 1
WHEN (point(pgeo.lng, pgeo.lat) <@> point(clp_orig_geo.lng, clp_orig_geo.lat) <= 10) THEN 2
END
as priority_type_group_suborder
FROM carrier_lane_priority as clp
INNER JOIN geo as clp_orig_geo on clp_orig_geo.id = clp.origin_geo_id
INNER JOIN geo as clp_dest_geo on clp_dest_geo.id = clp.destination_geo_id
WHERE (
(
(point(pgeo.lng, pgeo.lat) <@> point(clp_orig_geo.lng, clp_orig_geo.lat) <= 10 and
dgeo.id = clp.destination_geo_id)
or (point(pgeo.lng, pgeo.lat) <@> point(clp_orig_geo.lng, clp_orig_geo.lat) <= 10)
)
)
ORDER BY order_index
) as lane_priority

4 ответов

2 просмотра

> делать через join пока что не получается, через массивы не очень хотелось бы делать Легче сделать так, чтобы получилось. ;) В чём проблема-то? > 2. Можно ли избежать дублирования условия возникающего в where и when Можно попробовать использовать вложенный запрос, например. Т.е. вычислить CASE во вложенном, во внешнем выбрать WHERE priority_type_group_suborder IS NOT NULL... но это вряд ли будет так же эффективно.

Chiki-Briki ️️ Автор вопроса
Yaroslav Schekin
> делать через join пока что не получается, через ...

не получается приджоинить потому, что pg ругается на это select load_data.id from load_data left join load_stops as pls on load_data.id = pls.load_data_id and pls.sequence_order = 1 left join geo as pgeo on pgeo.id = pls.geo_id inner join ( SELECT carrier_id FROM carrier_lane_priority as clp INNER JOIN geo as clp_orig_geo on clp_orig_geo.id = clp.origin_geo_id WHERE (point(pgeo.lng, pgeo.lat) <@> point(clp_orig_geo.lng, clp_orig_geo.lat) <= 10) ) as clp on 95 = clp.carrier_id [42P01] ERROR: invalid reference to FROM-clause entry for table "pgeo" Hint: There is an entry for table "pgeo", but it cannot be referenced from this part of the query. Position: 420

Chiki Briki ️️
не получается приджоинить потому, что pg ругается ...

Для этого есть LATERAL. Т.е. INNER JOIN ( → INNER JOIN LATERAL (

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта