У меня есть три таблицы (заказы на продажу, счета-фактуры, заказы на покупку)
sales_order
------------
so_id (primary key)
item_id (foreign key)
entry_date
invoice
------------
invc_id (primary key)
item_id (foreign key)
entry_date
purchase_order
------------
po_id (primary key)
item_id (foreign key)
entry_date
, и все они относятся к одной центральной таблице (номенклатуре):
item_id (pk)
Я пытаюсьнаписать SQL-запрос, который будет возвращать все элементы с активностью в диапазоне дат.
Вот что я придумал:
select distinct item_id from sales_order where entry_date between ? and ?
union
select distinct item_id from invoice where entry_date between ? and ?
union
select distinct item_id from purchase where entry_date between ? and ?
Я думаю, что это правильное решение, ноЯ не уверен, как это проверить.
Вопрос 1. Применяется ли ключевое слово «отдельный» ко всем операторам или только к каждому утверждению?т. е. будет ли каждый запрос возвращать отдельный набор, но когда вы «объедините» их вместе, он может показать дубликаты?
Вопрос 2. Есть ли способ вернуть общее (уникальное) количество элементов (в виде отдельного запроса)??Как:
select count(
select distinct item_id from sales_order where entry_date between ? and ?
union
select distinct item_id from invoice where entry_date between ? and ?
union
select distinct item_id from purchase where entry_date between ? and ?
)
??