>我有两组数据,我想比较与特定 usr id 相关的整个数据。如果此数据不完全匹配,则给我一个 null。
下面我应该得到 user_id = null,因为并非列访问中的所有数据都相同
set a
user_id | access
1001 | hotel
1001 | spa
1001 | gym
set b
user_id | access
1001 | hotel
1001 | spa
1001 | pool
在下面的情况下,我应该得到 user_id = 1001,因为列访问中的所有数据都是相同的
set a
user_id | access
1001 | hotel
1001 | spa
1001 | gym
set b
user_id | access
1001 | hotel
1001 | spa
1001 | gym
SQL 查询应该是什么样子才能获得这种效果? 我在甲骨文数据库工作。
如果您有两个单独的表,并且希望用户完全相同,那么listagg()
是一个简单的解决方案:
select a.user_id
from (select user_id, listagg(access, ',') within group (order by access) as accesses
from a
group by user_id
) a join
(select user_id, listagg(access, ',') within group (order by access) as accesses
from b
group by user_id
) b
on a.user_id = b.user_id and a.accesses = b.accesses;