我有一个标题和行详细信息表。如;
标题表: 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”的交易。我的意思是我想要我的transaciton中包含的所有行代码。
我想要一个查询来获取可能有
的交易X,Y,Z
或
A,B,C,X,Y,Z
或
X,Y,Z,P
但不
X
或
X,Y
或
Z,Y,A,B
答案 0 :(得分:2)
您可能会发现这个有用。这是SQL Fiddle。
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
答案 1 :(得分: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'
)