С достаточно простыми запросами выходит просто, но есть вот такого типа
Входные данные, таблицы:
sale_order, stock_picking, sale_order_line, account_move_line, account_move
Связи между таблицами:
sale_order_line.order_id = many2one(sale_order)
sale_order_line.invoice_lines = many2many(account_move_line)
sale_order_line_invoice_rel(invoice_line_id, order_line_id)
stock_picking.sale_id = many2one(sale_order)
account_move_line.move_id = many2one(account_move)
По каким правилам мне нужно сделать выборку:
Выбрать все sale_order у которых sale_order_line.qty_delivered = 0 and sale_order_line.qty_invoiced and stock_picking > 2 and account_move > 2
Ход мыслей
select so.name
from sale_order so
left join stock_picking on so.id = stock_picking.sale_id
left join sale_order_line as sol on sol.order_id = so.id
left join sale_order_line_invoice_rel as solir on sol.id = solir.order_line_id
left join account_move as am on am.id = solir.invoice_line_id
group by so.name having count(*) > 2
Сложность заключается в правильности выборки и проверки количества выбранных объектов.
Всем заранее спасибо за участие.
Выборка на примере конкретного объекта правильная
select so.name, sol.name, solir.invoice_line_id, sp.id, solir.invoice_line_id
from sale_order so
left join sale_order_line as sol on sol.order_id = so.id
full outer join sale_order_line_invoice_rel as solir on solir.order_line_id = sol.id
left join stock_picking as sp on so.id = sp.sale_id
where so.id = 5924
group by so.name, sol.name, sp.id, solir.invoice_line_id
теперь я убираю where so.id = 5924 и мне нужно сделать условие если sp.id > 2 AND solir.invoice_line_id > 2 AND sol.qty_delivered = 0 AND sol.qty_invoiced = 0
Не могу понять что и где для этого добавить?