sqlite - объединить таблицы или подзапрос? - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть следующие таблицы:

create table part_category(id text primary key);

create table parts (id text primary key not null,
                    cat references part_category(id)); 

create table products (id text primary key not null);

create table product_parts (product references products(id),
                            part references parts(id), 
                            qty integer);

create table locations (id text primary key not null,
                        stage text not null);

create table stock (part references parts(id),
                    cat references part_category(id),
                    location references locations(id),
                    qty integer,
                    date text);

create table orders (part references parts(id),
                     cat references parts(cat),
                     product references products(id),
                     qty integer not null default 0, 
                     date_order text,
                     date_due text,
                     date_done text,
                     status boolean,
                     primary key(part, product, date_due));

И я хотел бы получить это из select:

Деталь, Категория, Продукт, Кол-во, Заказанная дата,Срок исполнения, Кол-во материала , Кол-во на складе , Кол-во вытираний

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

Проблема в том, что запрос возвращает ноль для всего.

orders = db.execute('''select distinct o.part, o.cat, o.product, o.qty, 
o.date_order, o.date_due, o.date_done, 
julianday(date_due) - julianday(date_order) as days_due, 
(select stock.qty from stock, orders 
where stock.part = orders.part and stock.location = 'stock' and orders.status = 1)
as qty_stock
from orders as o join stock as s on o.part = s.part 
where o.status = 1  
order by o.date_due asc, o.product asc, o.part asc''').fetchall()

Пример вывода

for item in orders:
    print item['part'], item['qty'], item['qty_stock']


SOME_PART_NUMBER 3 0

Но должно быть:

SOME_PART_NUMBER 3 22

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Я не уверен в вашей бизнес-логике.Я думаю, это то, что вы хотите.

select distinct o.part, o.cat, o.product, o.qty, 
        o.date_order, o.date_due, o.date_done, 
        julianday(date_due) - julianday(date_order) as days_due, 
        qs.stockQuantity as qty_stock
    from orders as o 
    join stock as s on o.part = s.part
    left join (select stock.part, sum(stock.qty) stockQuantity
                from stock ss 
                join orders oo on ss.part = oo.part
                where ss.location = 'stock' and oo.status = 1
                group by stock.part
                ) qs on qs.part = o.part
    where o.status = 1  
    order by o.date_due asc, o.product asc, o.part asc
0 голосов
/ 15 сентября 2018

В заголовке написано «объединить таблицы ИЛИ подзапрос». SQL делает оба. Я не говорю, что это проблема. Но это, безусловно, добавляет уровень сложности, который может быть подвержен ошибкам. Вы можете попробовать удалить подзапрос и заменить его на s.qty, а затем добавить s.location = "stock" в предложение WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...