不太确定如何表达这个问题,但是第一次希望执行以下操作,但很难做到这一点。不幸的是,不确定在下面运行的确切数据库引擎,它很可能来自 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 作为键,但是我需要接收所有 3 行 TransID 1,然后接收 3 行 TransID 3 等。
因此,结果应显示以下内容:
Trans_ID Product_code
1 A1
1 B2
1 A9
3 A1
3 A9
3 A8
5 D3
5 A1
有几种方法可以解决此类查询。评论中提到的第一个:
select *
from X
where trans_id in (select trans_id from X where product_code = 'A1')
第二个使用存在运算符:
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(,但是,这些是最直接的解决方案。