подвыражение возвратит 1 ?
У меня несколько подвыражений, которые должны соединяться каждый по другому с main table
Лучше так не делать, по-хорошему (т.е. это почти наверняка неудачная схема БД). А так — покажите пример таблиц или как-то подробнее объясните, что именно нужно.
У меня есть мэйн таблица у которой есть поле account_id. И мне нужно по account_id найти суммы кред или дебет по этому пользователю, а суммы хранятся в другой таблице. В другой таблице есть две колонки, которые отвечают за кредит, а другой за дебет. То есть если у клиента debet то нужно соединить с мэйн по cl_deb = account_id. если кредит, то по cl_cred = account_id (cl_deb и cl_cred - две колонки из второй таблицы)
> И мне нужно по account_id найти суммы кред или дебет В зависимости от чего "кред или дебет"? > То есть если у клиента debet И это что значит?
Сделайте 2 джойна, а кредит/дебет выведите через coalesce
* В зависимости от чего "кред или дебет"? Устанавливаю сам. Есть условия при которых я могу сказать, что здесь я должен соединять по debet или по kred. Мне нужно, как-то сказать, что этот подзапрос содержит кредит счет и должен соединяться с мэйн по cl_kred
Это плохая практика, Ярослав и написал, что со схемой скорее всего проблемы. Когда в джойнах появляются условия — это тревожный звонок. Условия должны быть в where
Лучше б Вы пример схемы / запроса показали, мне до сих пор так и не понятно... а так — условия в LEFT JOIN или JOIN с "(SELECT ... FROM a UNION ALL SELECT FROM b) AS ab ON ... ", например. Но, вообще, подобные схемы ведут к проблемам, в т.ч. с написанием запросов. К примеру, запрос https://t.me/pgsql/288791 — скорее всего, неправильный. ;)
select a.name, (select sum_val from table_1 d1 where d1.dat_doc between '01.10.2020' and '30.10.2020' and (d1.ls_cl like '10501%' or d1.ls_cl like '10101%') and (d1.naz_pla like '45020%' or d1.naz_pla like '45021%' or d1.naz_pla like '45022%' or d1.naz_pla like '45023%' or d1.naz_pla like '45024%') and d1.ls_cl = a.account) sub1, --debet (select sum_val from table_1 where d1.dat_doc between '01.10.2020' and '30.10.2020' and (d1.ls_cor like '20201%' or d1.ls_cor like '20204%') and (d1.naz_pla like '45020%' or d1.naz_pla like '45021%' or d1.naz_pla like '45022%' or d1.naz_pla like '45023%' or d1.naz_pla like '45024%' and d1.ls_cor = a.account)) sub2 --kredit from acc a -- main table Мне нужно чтобы он взял инфу с мэйна. Если кредит то по кредиту, если дебет по дебету.
Можно либо посылать разные запросы (если это весь запрос, и "нужен кредит или дебет" зависит от внешних условий), либо внести это условие в JOIN, с помощью либо CASE, либо UNION ALL (как я писал выше). Но в последнем случае могут быть проблемы с производительностью — PostgreSQL вообще "не любит" кривых схем и запросов, учтите.
Обсуждают сегодня