我有下表:
id | hash
1 aaa
1 bbb
1 ccc
2 ddd
2 eee
2 aaa
3 bbb
我想为提供的ID获取唯一的哈希值,例如对于ID 1,我会在这里获得1,因为aaa和bbb已经存在于不同的ID中。对于2我得到2,beucase只有aaa存在于别处,等等。
期望的结果:
id | result
1 1
2 2
我该怎么做?
编辑:
我试过了:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.hash = t2.hash
WHERE t1.id = 1 AND t2.id != 1;
但它不会返回正确的结果,而是返回1个ID中存在的哈希值,以及其中一个哈希值。
答案 0 :(得分:1)
select ID,COUNT(hash) as Expr1
from table1
where hash not in
(
select hash
from
table1
group by hash
having count(ID)>1
)
group by ID
答案 1 :(得分:1)
使用having子句获取唯一哈希值,然后计算每个id的哈希值:
select id, count(*)
from
(
select hash, id
from mytable
group by hash
having count(*) = 1
) one_time_hashes
group by id;
答案 2 :(得分:0)
你的问题是: 并且我想为提供的ID获取唯一的哈希值,例如对于ID 1,我会在这里获得1,因为aaa和bbb已经存在于不同的ID中。对于2我得到2,beucase只有aaa存在于别处,等等。 1,返回1, 2,返回2 ... 你确定你正确地解释了你想要的吗?
我想你想要为id = 1返回ccc,因为这个哈希是唯一的,ddd或eee代表2 ...
如果是这样,这个例子应该有效(我在Oracle上):
select hash
from table t1
where ID = 1
and hash not in (select hash
from table t2
where t2.hash = t1.hash
and T2.ID <> t1.id)
and rownum=1
;
请注意,您需要一些性能指标。
希望这会有所帮助。
基督教
答案 3 :(得分:0)
SELECT x.id
, COUNT(*)
FROM my_table x
LEFT
JOIN my_table y
ON y.id <> x.id
AND y.hash = x.hash
WHERE y.id IS NULL
GROUP
BY id;
NOT EXISTS类型的解决方案可能会更快。