表中2个字段的常用记录?

时间:2014-03-20 09:13:45

标签: db2

我有一个表有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

有人可以帮忙吗?

2 个答案:

答案 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值。