Oracle SQL按集合划分,元素数未知

Oracle SQL按集合划分,元素数未知,sql,oracle,division,Sql,Oracle,Division,我到处找了找,但似乎找不到这个问题的答案 我正在做一个数据库项目。我有一张桌子,里面有汽车和它们的颜色 其结构如下: owner_id || car_make || car_color 001 || ford || red 001 || ford || blue 002 || chevy || red 002 || Telsa || blue 002 || ford ||

我到处找了找,但似乎找不到这个问题的答案

我正在做一个数据库项目。我有一张桌子,里面有汽车和它们的颜色

其结构如下:

owner_id || car_make || car_color
   001   ||   ford   ||     red
   001   ||   ford   ||     blue
   002   ||   chevy  ||     red
   002   ||   Telsa  ||     blue
   002   ||   ford   ||     green
   003   ||   chevy  ||     red
   004   ||   chevy  ||     red
   004   ||   Telsa  ||     blue
   005   ||   ford   ||     red
   005   ||   ford   ||     blue
我想能够做的是显示车主id列表,列出所有拥有与其他车主相同颜色和品牌汽车的车主。 例如,如果我选择owner 001拥有的所有汽车,我会得到

owner_id || car_make || car_color
   001   ||   ford   ||     red
   001   ||   ford   ||     blue
我可以使用什么SQL来获取同时拥有红色福特和蓝色福特的其他车主的用户ID列表

我想把005退回,因为005车主和001车主一样,拥有一辆红色福特和一辆蓝色福特

我知道SQL本身不支持除法,我也尝试过其他方法,比如减号和not exists,但我肯定做得不正确,因为我得到的只是错误,或者只是不正确的结果


再次,如果已经回答了,请道歉。对于我糟糕的英语,

这将显示所有实例,其中有人拥有与至少一位其他车主拥有的所有汽车相同的品牌和颜色

select *
  from tbl x
 where not exists (select 1
          from tbl y
         where y.car_make <> x.car_make
           and y.car_color <> x.car_color
           and y.owner_id <> x.owner_id)

这应该是可行的-它创建了一个owner 001品牌和颜色的列表,将所有其他车主加入该列表,并且只包括与owner 001的所有汽车匹配的车主:

WITH
  Owner001_Cars AS (
    SELECT car_make, car_color
    FROM myTable
    WHERE owner_id = '001')
SELECT owner_id
FROM myTable
INNER JOIN Owner001_Cars USING (car_make, car_color)
WHERE owner_id <> '001'
GROUP BY owner_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM Owner001_Cars)

抱歉,我应该说得更清楚。我想返回一个实例,其中一位车主拥有与另一位车主相同的所有汽车品牌/颜色组合,因此在我的示例中,我想要的查询将返回005,因为车主005还拥有一辆红色福特和一辆蓝色福特,与用户相同1@KevinDustie请参见编辑窗口中的“我的新查询”。它应该这样做。每个车主的汽车都将在第2列中汇总为一组。只有拥有2个以上车主的车才能返回。@KevinDustie我刚刚做了第二次编辑,试试这个。它应该比listagg的想法运行得更快。@KevinDustie您必须为每个所有者运行它