2013-08-28 111 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' 
    )