2013-08-28 109 views
0

我有一個標題和行詳細信息表。如;用sql查詢獲取多個數據

部首表:TRANSACTIONS 線細節表:TRANSACTIONS_LINE_DETAIL

在事務表: 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'的transcations。我的意思是我希望我的交易中包含所有的行代碼。

我想要一個查詢,獲取我的交易有

X,Y可能,Z

A,B,C,X,Y,Z

X,Y,Z,P

NOT

X

X,Y

Z,Y,A,B

回答

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 
+0

謝謝!成本要低得多。 – Mikail

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' 
    )