如何创建SQL或Java中所有可能组合的哈希?

如何创建SQL或Java中所有可能组合的哈希?,java,sql,oracle,Java,Sql,Oracle,我有一个简单的问题: select key, name from cities 这给了我这样的价值观: 11 | Chicago 21 | New York 31 | Boston 我需要能够做的是在SQL或Java中创建所有可能组合的哈希,以便在最后接收此结果: 11 | Chicago 21 | New York 31 | Boston 32 | Chicago/New York 42 | Chicago/Boston 52 | New York/Boston 63 | Chicago/

我有一个简单的问题:

select key, name from cities
这给了我这样的价值观:

11 | Chicago
21 | New York
31 | Boston
我需要能够做的是在SQL或Java中创建所有可能组合的哈希,以便在最后接收此结果:

11 | Chicago
21 | New York
31 | Boston
32 | Chicago/New York
42 | Chicago/Boston
52 | New York/Boston
63 | Chicago/New York/Boston

有什么想法吗?

这并不完美,但可以作为一个开始:

首先,我创建了一个函数:

create or replace function sum_string(str in varchar2) return number is
  Result number;
begin
  execute immediate 'select ' || str || ' from dual'
    into result;
  return(Result);
end sum_string;
/
然后查询您的表是您的表

with jwt as  (
  select t1.key k1, t1.name n1, t2.key k2, t2.name n2, t1.key + t2.key jkey
    from your_table t1
    left outer join (select key, name
                       from your_table
                     union all
                     select 0 "key", null "name" from dual) t2 on t1.key <>
                                                                  t2.key
  )
select jkey, max(aaa.pth)
  from (select sys_connect_by_path(t.n1, '/') pth,
               sum_string(ltrim(sys_connect_by_path(t.k1, '+'), '+')) jkey
          from jwt t
         start with t.k2 = 0
        connect by nocycle prior k1 = k2) aaa
 group by jkey;

为什么您的预期产出与这三个城市都不一致?如果键值之和不是唯一的呢?你说得对,我刚刚添加了最后一个结果,有三个城市。密钥总是唯一的,我知道。你说的创建散列是什么意思?术语hash有多种含义,这取决于上下文,这里不太清楚……对不起,我猜hash不是正确的描述。这更像是一张地图,11、21等是键,城市名称是值。为什么芝加哥/纽约是33而不是32?在一般情况下,当两个组合加起来等于同一个键时会发生什么?Java哈希不能包含重复的键。