У меня есть следующие таблицы:
CLIENT
- ID
- NAME
- USER
ORDER
- ID
- DATE
- CLIENT_ID
- USER
ORDER_LINE
- ORDER_ID
- LINE_ID
- USER
Поле пользователя отслеживает человека, который последним изменил запись. Кроме того, каждая позиция может быть изменена другим пользователем.
Я пытаюсь выяснить, с учетом ПОЛЬЗОВАТЕЛЯ, с какими заказами они были связаны.
select
client.id,
client.name,
order.id,
order.date,
case
when order_line.user = :user then 'Line Item'
when order.user = :user then 'Order'
when client.user = :user then 'Client'
end
from
order_line
join order on order_id = order.id
join client on order.client_id = client.id
where
order_line.user = :user
or order.user = :user
or client.user = :user
Проблема в том, что пользователь может касаться таблиц order и line_line, поэтому я получаю несколько результатов. Добавление SELECT не помогает, так как результат оператора case различен в каждом случае.
Есть ли способ реструктурировать запрос, чтобы я получал только один результат за заказ?
Результат оператора case на самом деле не так важен - было бы неплохо, если бы я мог получить «Позиция, порядок», если кто-то дотронется до обеих таблиц, но просто «Позиция» будет в порядке.