在 SQL 中扩展选择

  • 本文关键字:选择 扩展 SQL sql
  • 更新时间 :
  • 英文 :


不太确定如何表达这个问题,但是第一次希望执行以下操作,但很难做到这一点。不幸的是,不确定在下面运行的确切数据库引擎,它很可能来自 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(,但是,这些是最直接的解决方案。

最新更新