Извлеките все записи, если в соединительной таблице нет записей

#sql #join

Вопрос:

У меня есть эти три таблицы,

PO_HEADER

po_number имя поставщика
10001 Xyz
100002 азбука

PO_LINEITEM

номер строки po_number item_quantity получен_количество
0001 10001 20 10
0002 10001 80 10
0002 10002 40 35

ОТПРАВКА_ЛИНЕЙТЕМ

номер строки po_number shipping_quant
0001 10001 20

Как получить order_master на основе этих двух условий

  1. если какой-либо элемент po_lineitem имеет значение item_quantity > полученное количество.
  2. если у po_lineitem есть item_quantity > (сумма ранее отправленного количества из asn_lineitem для того же номера строки и номера) .2(b) если в asn_lineitem нет элементов, это должно возвращать значение true.

Я написал этот запрос, но не смог выполнить 2(b)

 select count(*) from erp_po_header 
where po_number in
(select erlitms.po_number from erp_po_line_items erlitms
JOIN
   (select sum(shipping_quantity) as total_prev_shipped_items,po_number,item_number from 
  asn_lineitem
  Group by po_number,item_number) 
   asn_items 
 ON erlitms.po_number = asn_items.po_number
and erlitms.item_number = asn_items.item_number
and erlitms.item_quantity > CAST (erlitms.received_quantity AS INTEGER)
and erlitms.item_quantity > asn_items.total_prev_shipped_items )   
 

Комментарии:

1. … Я не понимаю второго условия. Как определяется «ранее отправленный»? В ваших образцах данных нет даты. Что такое asn_lineitem ? Это не определено.

2. Ваш запрос, описание и примеры имен таблиц не совпадают, предлагаю вам прочитать корректуру и внести некоторую ясность.