sql查询产品订购数量小于1号产品和2号产品订购数量的产品的编号和产品名。

查询产品订购数量小于1号产品和2号产品订购数量的产品的编号和产品名。
订单表 purchases

img


产品表 products

img

#获得1号和2号商品分别被购买的数量
SELECT SUM(quantity) FROM purchases WHERE product_id=1 OR product_id=2 GROUP BY product_id;#{5,6}
#获得所有商品分别被购买的数量
SELECT SUM(quantity) FROM purchases GROUP BY product_id;#{5,6,1}
#将两个表左外连接,通过编号获得名字
SELECT pu.product_id,p.name FROM purchases pu
LEFT OUTER JOIN products p ON pu.product_id=p.product_id;


SELECT pu.product_id,p.name FROM purchases pu 
LEFT OUTER JOIN products p ON pu.product_id=p.product_id
GROUP BY pu.product_id HAVING SUM(pu.quantity) < ALL
(SELECT SUM(quantity) FROM purchases WHERE product_id=1 OR product_id=2 GROUP BY product_id);

你可以使用如下的SQL查询语句来查询订购数量小于1号产品和2号产品订购数量的产品的编号和产品名:

SELECT p.product_id, p.name
FROM 产品表 p
WHERE p.product_id NOT IN (
    SELECT o.product_id
    FROM 订单表 o
    WHERE o.product_id IN (1, 2) AND o.quantity >= 1
)

在这个例子中,我们使用了一个子查询来获取订购1号产品和2号产品的订单,然后在主查询中通过NOT IN操作符,排除了订购数量大于等于1的产品。最后,我们选择了产品表中的产品编号和产品名来作为查询结果。

注意,这个查询语句假定订单表中的product_id列和产品表中的product_id列是相同的,并且产品表中的产品名和订单表中的产品数量都是整数类型。如果实际情况与此不同,你需要进行相应的修改。


SELECT pu.product_id,p.name FROM purchases pu 
LEFT OUTER JOIN products p ON pu.product_id=p.product_id
GROUP BY pu.product_id HAVING SUM(pu.quantity) < ALL
(SELECT SUM(quantity) FROM purchases WHERE product_id=1 OR product_id=2 GROUP BY product_id);