2016-08-21 4 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