不确定如何表达这个问题,但是第一次想要做以下事情但是却在苦苦挣扎。不幸的是,不确定在下面运行的确切数据库引擎很可能是IBM的原产地。
做一个简单的数据示例:
TRANSACTIONS
Trans_ID Product_code
1 A1
1 B2
1 A9
2 B3
2 B4
3 A1
3 A9
3 A8
4 C2
5 D3
5 A1
因此,我可以使用特定的产品代码(即A1)来识别交易ID,但是,我需要在结果中获取包含交易ID的所有行,其中找到匹配的产品代码。
这意味着我可以使用产品代码A1作为密钥,但是我需要接收TransID 1的所有3行,然后接收3行TransID 3等。
因此,结果应显示如下:
Trans_ID Product_code
1 A1
1 B2
1 A9
3 A1
3 A9
3 A8
5 D3
5 A1
答案 0 :(得分:2)
如何解决此类查询有多种方法。评论中提到的第一个:
select *
from X
where trans_id in (select trans_id from X where product_code = 'A1')
第二个使用exists运算符:
select *
from X x1
where exists (select *
from X x2
where product_code = 'A1' and x1.trans_id = x2.trans_id
)
下一个使用自联接:
select x1.trans_id, x1.product_code
from X x1 join
X x2
on x1.trans_id = x2.trans_id
where x2.product_code = 'A1'
我相信我缺少其他一些简单的解决方案(例如使用ANY),但是,这些是最直接的解决方案。