首页 > 解决方案 > SQL - 如何提取满足特定条件的行

问题描述

我将描述我的问题,并向您展示我为解决它而尝试做的事情。

所以首先我有3个这样的表: 在此处输入图像描述

我想从订单表中获取 productLine 包含这 3 个类别(老式汽车、经典汽车、摩托车)的所有订单的状态和 orderNumber

SELECT o.status, o.orderNumber
FROM orders o
WHERE EXISTS(
         SELECT p.productLine 
         FROM products p 
         WHERE p.productLine  IN ('Vintage Cars', 'Classic Cars', 'Motorcycles'))

上面的查询是我试图做的,但它每行都返回我。

我想我不明白如何检查 productLine 是否包括 Vintage Cars 和 Classic Cars and Motorcycles。谢谢!

标签: sql

解决方案


使用聚合:

select o.status, o.orderNumber
from orders o join
     orderdetails od
     on o.ordernumber = od.ordernumber join
     products p
     on od.productcode = p.productcode
where p.productLine in ('Vintage Cars', 'Classic Cars', 'Motorcycles')
group by o.status, o.orderNumber
having count(distinct p.productLine) = 3;

having子句检查所有三个产品线是否都存在于order.


推荐阅读