针对来自多个ID的单个标识的SQL解决方案

针对来自多个ID的单个标识的SQL解决方案,sql,amazon-athena,Sql,Amazon Athena,我正在寻找一种方法,通过SQL,从共享公共(但不同)键的行建立一个visitor\u id,然后生成一个输出表,将已建立的visitor\u id分配回所有行。 我的数据库是AWS雅典娜 例如: with things as ( select 'aaa' as thing_id, '111' as visitor_id, 'alpha@gmail.com' as email_address, '(111) 111-1111' as phone_number union all s

我正在寻找一种方法,通过SQL,从共享公共(但不同)键的行建立一个
visitor\u id
,然后生成一个输出表,将已建立的
visitor\u id
分配回所有行。 我的数据库是AWS雅典娜

例如:

with things as (
    select 'aaa' as thing_id, '111' as visitor_id, 'alpha@gmail.com' as email_address, '(111) 111-1111' as phone_number
    union all select 'bbb' as thing_id, '111' as visitor_id, 'beta@gmail.com' as email_address, null as phone_number
    union all select 'ccc' as thing_id, '111' as visitor_id, null as email_address, '(222) 222-2222' as phone_number
    union all select 'ddd' as thing_id, '222' as visitor_id, 'alpha@gmail.com' as email_address, '(333) 333-3333' as phone_number
    union all select 'eee' as thing_id, '333' as visitor_id, 'alpha@gmail.com' as email_address, null as phone_number
    union all select 'fff' as thing_id, '444' as visitor_id, 'charlie@gmail.com' as email_address, '(333) 333-3333' as phone_number
    union all select 'ggg' as thing_id, '555' as visitor_id, 'charlie@gmail.com' as email_address, '(444) 444-4444' as phone_number
    union all select 'hhh' as thing_id, '666' as visitor_id, null as email_address, '(444) 444-4444' as phone_number

)
我知道所有这些东西都属于同一个
访客id

  • aaa
    bbb
    ccc
    都共享相同的
    visitor\u id
  • ddd
    eee
    aaa
    bbb
    ccc
    共享相同的
    电子邮件地址
  • fff
    ddd
    共享相同的
    电话号码
    (因此与
    aaa
    共享相同的
    visitor\u id
  • ggg
    fff
    共享相同的
    email\u地址(因此与
    fff
    共享相同的
    visitor\u id
    ,后者与
    aaa
    共享相同的
    visitor\u id
  • hhh
    ggg
    共享相同的
    电话号码
    (因此与
    ggg
    相同的
    visitor\u id
    ,与
    aaa
    相同)
我想要的输出表是:

|---------------------|------------------|
|      thing_id       |     vistior_id   |
|---------------------|------------------|
|         aaa         |        111       |
|---------------------|------------------|
|         bbb         |        111       |
|---------------------|------------------|
|         ccc         |        111       |
|---------------------|------------------|
|         ddd         |        111       |
|---------------------|------------------|
|         eee         |        111       |
|---------------------|------------------|
|         fff         |        111       |
|---------------------|------------------|
|         ggg         |        111       |
|---------------------|------------------|
|         hhh         |        111       |
|---------------------|------------------|

我尝试过交叉连接,然后消除重复项。然而,我正在努力解决
fff
ggg
hhh
,因为它们只通过另一个
thing\u id
s

aaa
相关,这需要递归CTE或分层查询。您使用的是什么数据库?您使用的是哪个数据库?另一种方法是使用图形数据库。任何连接的东西都是同一ID的一部分。我使用的是AWS雅典娜