使用sql查询获取多个数据

时间:2013-08-28 11:09:26

标签: sql oracle plsql plsqldeveloper

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

标题表: 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

2 个答案:

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