在SQL中扩展选择

时间:2017-07-22 09:27:09

标签: 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作为密钥,但是我需要接收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

1 个答案:

答案 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),但是,这些是最直接的解决方案。