我有一个表有2个字段,比如A,B。假设A具有值a1,a2。 B中a1的对应记录是1,2,3,x,y,z。 B中a2的对应记录是1,2,3,4,d,e,f
我需要在DB2中编写一个查询,以便它为A(a1和a2)中的每个记录获取B中的公共记录。
所以这里的输出是:
A B
a1 1
a1 2
a1 3
a2 1
a2 2
a2 3
有人可以帮忙吗?
答案 0 :(得分:0)
尝试类似:
SELECT A, B
FROM Table t1
WHERE (SELECT COUNT(*) FROM Table t2 WHERE t2.B = t1.B)
= (SELECT COUNT(DISTINCT t3.A) FROM Table t3)
ORDER BY A, B
答案 1 :(得分:0)
这可能不是100%准确,因为我无法在DB2中对其进行测试,因此您可能需要稍微调整一下查询以使其正常工作。
with t(num) as (select count(distinct A) from table)
select t1.A, t1.B
from table t1, table t2, t
where t1.B = t2.B
group by t1.A, t1.B, num
having count(*) = num
基本上,我们的想法是将同一个表与列B连接起来,并过滤出与A列中元素数完全相同的次数,这表明它是一个共同的记录。 A值。