У меня есть две таблицы в базе данных Postgres, представляющей простые ордера с рынка.Основная таблица с информацией о заказе и подробная таблица с указанием специфики покупки, с внешним ключом, возвращаемым в мастер.Достаточно просто.
Более тысячи заказов с рынка, я хотел бы найти некоторые конкретные заказы на основе того, что было куплено и в каком количестве.
У меня есть еще две таблицы, аналогичным образом, мастер и потомок, где я создаю "пачку" и детали товаров из рынка.
Для пример :Пакет А содержит 2 яблока и 3 апельсина.Я определяю это в таблицах.Теперь я хотел бы узнать, сколько ордеров и какие ордера с рынка соответствуют этой конкретной комбинации точно .
Важно, чтобы это было точное совпадение.Заказ, содержащий дополнительные товары или с любым другим количеством, не совпадает.
В скрипте SQL я настроил простой пример с данными.Сырой DDL ниже.Два заказа в таблице должны соответствовать Пакету А.
http://sqlfiddle.com/#!17/b4f55
CREATE TABLE customer_order(
order_id serial PRIMARY KEY NOT NULL,
customer_name VARCHAR(100) NOT NULL
);
CREATE TABLE order_detail(
id serial PRIMARY KEY,
order_id INTEGER,
item_sku VARCHAR(50),
item_quantity INTEGER,
FOREIGN KEY(order_id) REFERENCES customer_order(order_id)
);
INSERT INTO customer_order (customer_name) VALUES ('John');
INSERT INTO customer_order (customer_name) VALUES ('Mary');
INSERT INTO customer_order (customer_name) VALUES ('Bill');
INSERT INTO order_detail (order_id, item_sku, item_quantity) VALUES (1, 'APPLE', 2);
INSERT INTO order_detail (order_id, item_sku, item_quantity) VALUES (1, 'ORANGE', 3);
INSERT INTO order_detail (order_id, item_sku, item_quantity) VALUES (2, 'ORANGE', 5);
INSERT INTO order_detail (order_id, item_sku, item_quantity) VALUES (3, 'APPLE', 2);
INSERT INTO order_detail (order_id, item_sku, item_quantity) VALUES (3, 'ORANGE', 3);
CREATE TABLE pack_master(
pack_id serial PRIMARY KEY NOT NULL,
name VARCHAR(100) NOT NULL
);
CREATE TABLE pack_child(
id serial PRIMARY KEY,
pack_id INTEGER,
item_sku VARCHAR(50),
item_quantity INTEGER,
FOREIGN KEY(pack_id) REFERENCES pack_master(pack_id)
);
INSERT INTO pack_master (name) VALUES ('Pack A');
INSERT INTO pack_master (name) VALUES ('Pack B');
INSERT INTO pack_child (pack_id, item_sku, item_quantity) VALUES (1, 'APPLE', 2);
INSERT INTO pack_child (pack_id, item_sku, item_quantity) VALUES (1, 'ORANGE', 3);
INSERT INTO pack_child (pack_id, item_sku, item_quantity) VALUES (2, 'GRAPES', 5);