0

我有一个标题和行详细信息表。如;

表头表:TRANSACTIONS 行明细表:TRANSACTIONS_LINE_DETAIL

在 TRANSACTIONS 表中:包括 SQ_TRANSACTION_ID、CH_TRANSACTION_NAME、.. 列。

在 TRANSACTIONS_LINE_DETAIL 表中:包括 SQ_TRANSACTION_LINE_DETAIL_ID、RF_TRANSACTION_ID、CH_LINE_CODE、.. 列。

TRANSACTIONS_LINE_DETAIL 表为保存在 TRANSACTIONS 表中的每个事务保留一个或多个详细信息行。

所以我的问题是;

我想编写一个查询来获取包含 X、Y 和 Z 行代码的交易。(CH_LINE_CODE)。

我是这样写的;

SELECT DISTINCT 
   TR.RF_TRANSACTION_ID
FROM
   TRANSACTIONS_LINE_DETAIL TR
WHERE
   TR.CH_LINE_CODE IN ('X','Y','Z')

但是这段代码可能会返回没有“Y”或“X”或“Z”的交易。我的意思是我希望我的事务中包含所有行代码。

我想要一个查询来获取我可能拥有的交易

X、Y、Z

或者

A、B、C、X、Y、Z

或者

X、Y、Z、P

不是

X

或者

X, Y

或者

Z、Y、A、B

.

4

2 回答 2

2

你可能会发现这个很有用。这是SQL 小提琴

SELECT rf_transaction_id
  FROM transactions_line_detail
 WHERE ch_line_code IN ('X', 'Y', 'Z')
 GROUP BY rf_transaction_id
HAVING COUNT(1) = 3
于 2013-08-28T12:58:31.997 回答
1

尝试这个

Select * From TRANSACTIONS_LINE_DETAIL td
Where 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'X'
    )
  And 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'Y'
    )
  And 
  Exists 
    ( Select 1 From TRANSACTIONS_LINE_DETAIL td2
      Where td2.RF_TRANSACTION_ID = td.RF_TRANSACTION_ID
        And td2.CH_LINE_CODE = 'Z'
    )
于 2013-08-28T11:21:20.237 回答