如何创建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哈希不能包含重复的键。