mysql查询从另一个表中获取总和并选择

mysql查询从另一个表中获取总和并选择,mysql,Mysql,我有两个表,我想构建一个查询,仅从表交货未完成数量的订单中选择结果: 表顺序: 表交付: 我想要这样的东西: SELECT * FROM `orders` WHERE `quantity`>(SELECT SUM(`quantity`) FROM `deliveries` WHERE `order_id`=orders.id); id item quantity 1 a 15 3 c 6 结果应该是这样的: SELECT * FROM `orders` WHER

我有两个表,我想构建一个查询,仅从表交货未完成数量的订单中选择结果:

表顺序:

表交付:

我想要这样的东西:

SELECT * FROM `orders` 
WHERE `quantity`>(SELECT SUM(`quantity`) 
FROM `deliveries` 
WHERE `order_id`=orders.id);
id item quantity
1  a    15
3  c    6
结果应该是这样的:

SELECT * FROM `orders` 
WHERE `quantity`>(SELECT SUM(`quantity`) 
FROM `deliveries` 
WHERE `order_id`=orders.id);
id item quantity
1  a    15
3  c    6

如果订单表中每个订单只有一行,请尝试以下查询。我想你还需要有没有交货的订单

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)

如果订单表中每个订单只有一行,请尝试以下查询。我想你还需要有没有交货的订单

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)
查询:

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子句允许使用别名的列名

查询:

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子句允许使用别名的列名。

您也可以这样尝试:

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

您也可以这样尝试:

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

WHERE'quantity'>选择SUM'quantity'有什么用?您得到的是所有数量表的总和,因此不可能得到一个结果。您的查询应该是这样的:

SELECT * FROM `orders` 
WHERE `quantity`>(SELECT SUM(`quantity`) 
FROM `deliveries` 
WHERE `order_id`=orders.id);
id item quantity
1  a    15
3  c    6
这将完成或完成所有交付:

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

这将获得所有尚未完成或完成的交付:

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

WHERE'quantity'>选择SUM'quantity'有什么用?您得到的是所有数量表的总和,因此不可能得到一个结果。您的查询应该是这样的:

SELECT * FROM `orders` 
WHERE `quantity`>(SELECT SUM(`quantity`) 
FROM `deliveries` 
WHERE `order_id`=orders.id);
id item quantity
1  a    15
3  c    6
这将完成或完成所有交付:

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

这将获得所有尚未完成或完成的交付:

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

你想做什么?我看不懂这张桌子。你想得到已经完成的订单吗?意思是如果所有的订单都已经交付了?或者尚未完成的订单?您想做什么?我看不懂这张桌子。你想得到已经完成的订单吗?意思是如果所有的订单都已经交付了?还是尚未完成的订单?