2016-08-21 78 views
0

我有兩個表,我想建立一個查詢,以便從那裏量不是由表交貨完成訂單隻選擇結果:MySQL查詢需要從另一個表總和,並選擇

orders

id item quantity 
1 a 15 
2 b 5 
3 c 6 

deliveries

id order_id quantity 
1 2  3 
2 2  1 
3 2  1 
4 3  3 

我希望它是這樣的:

SELECT * FROM `orders` 
WHERE `quantity`>(SELECT SUM(`quantity`) 
FROM `deliveries` 
WHERE `order_id`=orders.id); 

結果應該是這樣的:

id item quantity 
1 a 15 
3 c 6 
+0

你想做什麼?我無法理解桌子。你想獲得已經完成的訂單?這意味着所有的訂單是否已經交付?或尚未完成的訂單? –

回答

1

如果順序表中有每個訂單隻有一行,嘗試下面的查詢。我認爲你還需要有沒有交貨的訂單。

SELECT 
    ord.* 
FROM orders ord LEFT JOIN 
    (SELECT 
    order_id, sum(quantity) AS 'totalDelivered' 
    FROM 
    deliveries 
    GROUP BY order_id) 
    AS delv 
    ON ord.id = delv.order_id 
WHERE (delv.totalDelivered < ord.quantity OR delv.order_id IS NULL) 
1
create table orders 
( id int not null, 
    item varchar(100) not null, 
    quantity int not null 
); 
insert orders values 
(1,'a',15), 
(2,'b',5), 
(3,'c',6); 

create table deliveries 
( id int not null, 
    order_id int not null, 
    quantity int not null 
); 
insert deliveries values 
(1,2,3), 
(2,2,1), 
(3,2,1), 
(4,3,3); 

查詢:

select o.id,o.item,o.quantity as quant_ordered,ifnull(sum(d.quantity),0) as delivered 
from orders o 
left join deliveries d 
on d.order_id=o.id 
group by o.id,o.item,o.quantity 
having delivered<quant_ordered; 

+----+------+---------------+-----------+ 
| id | item | quant_ordered | delivered | 
+----+------+---------------+-----------+ 
| 1 | a |   15 |   0 | 
| 3 | c |    6 |   3 | 
+----+------+---------------+-----------+ 

having子句允許使用的alias'd列名。

1

您可以通過這種方式也嘗試:

SELECT o.id, o.item, o.quantity 
FROM orders o 
INNER JOIN (SELECT 
    o1.id, 
    IFNULL(SUM(d.quantity), 0) quantity 
FROM orders o1 
LEFT JOIN deliveries d ON d.order_id = o1.id 
GROUP BY d.order_id) p ON p.id = o.id 
AND o.quantity > p.quantity 
1

什麼用的「WHERE‘量’>(SELECT SUM(‘量’)」你讓所有的量表的總和?所以這是不可能得到一個結果,你的查詢應該是這樣的:

這將讓所有的交付完成或完成:

SELECT orders.* FROM orders INNER JOIN deliveries ON orders.id=deliveries.order_id WHERE orders.quantity=deliveries.quantity 

這將讓所有還沒有完成或完成交付:

SELECT orders.* FROM orders INNER JOIN deliveries ON orders.id=deliveries.order_id WHERE orders.quantity>deliveries.quantity 
相關問題