如何从一个字段的表中选择多个记录?



大家好,我遇到了这样的情况:

有一个表WH_AT:

<表类> ID Warehouse_ID Attribute_ID tbody><<tr>1W011012W012013W021064W022095W031566W03201

查询:无论需要多少属性,都不需要自连接;什么所需的是将它们写在where子句中,并在having子句中计数)

select warehouse_id
from   wh_at
where  attribute_id in (101, 201)
group  by warehouse_id
having count(distinct attribute_id) = 2
;
在结尾处记录了示例数据后,将产生以下输出:
WAREHOUSE_ID
------------
W01
W04

测试数据如下所示。我添加了更多的示例,以确保查询在这些情况下正确工作。特别是最后一个示例,其中同一属性多次显示同一仓库。(也许这在你的数据中是不可能的,由于一个唯一的约束,但如果是这样,那么你应该在你的问题中提到它。)

create table wh_at (id, warehouse_id, attribute_id) as
select  1, 'W01', 101 from dual union all
select  2, 'W01', 201 from dual union all
select  3, 'W02', 106 from dual union all
select  4, 'W02', 209 from dual union all
select  5, 'W03', 156 from dual union all
select  6, 'W03', 201 from dual union all
select  7, 'W04', 101 from dual union all
select  8, 'W04', 201 from dual union all
select  9, 'W04', 303 from dual union all
select 10, 'W05', 101 from dual union all
select 11, 'W05', 101 from dual
;

你很接近了。你的问题基本正确。

可以将表本身连接起来。第一个搜索101,第二个搜索102。然后,连接可以找到匹配的仓库。例如:

select distinct a.warehouse_id
from wh_at a
join wh_at b on b.warehouse_id = a.warehouse_id
where a.attribute_id = 101 and b.attribute = 102

最新更新