assets_originators, users, users_originators и data_here.
Юзер ассоциируется с оригинатором.
Ассеты тоже с оригинаторами.
На входе я имею user_id, дату (date) и asset_id. Мне нужно сначала зайти в таблицу users_originators, и посмотреть, к каким оригинаторам имеет доступ пользователь.
Потом я иду в таблицу assets_originator и смотрю по asset_id, к какому оригинатору этот ассет относится.
И только потом иду в таблицу data_here, где подсталяю asset_id и список id оригинаторов.
Реализовал в виде вложенных запросов, но кажется, что можно как-то проще.
https://dbfiddle.uk/?rdbms=postgres_11&fiddle=11cd21df2d776e4a2bb486abb6761e1b
Непонятно, что нужно получить. Если несколько результатов разной структуры, то нужно несколько запросов. Кстати: IN ( SELECT DISTINCT(_uo.originator_id) ... Аж два дефекта в таком коротком коде. ;)
Нужно из таблицы data_here получить данные, имея asset_id, user_id и date. Но предварительно надо понять, к каким originator_id имеет доступ user_id. Для этого я и бегаю по таблицам ) Два запроса я сделал просто для примера. Типа два варианта моих) (оставил один)
Например, У юзера есть доступ к оригинатору 1, но в таблице assets_originators запрашиваемый ассет с тим оригинатором не связан - то значит его показывать не надо.
Казалось бы, JOIN / EXISTS, как обычно, зачем тут несколько запросов?
Про JOIN слышал, EXISTS иду читать))
Запрос у меня как бы 1, только с подзапросами)
Обсуждают сегодня