2017-11-22 12 views
1

2つの異なる接続テーブルからデータを取得するMySQLクエリを作成しようとしています。私はすでにいくつかの時間前にsimmilar状況に直面し、いくつかのStackoverflowerは私を助けたが、今、彼の解決策から始めようとしているが、私はどのように私の現在の問題のためのクエリを変更する必要がありますかわからない。2番目のテーブルに一致する複数の条件がある場合に複数のテーブルからクエリを実行

は、私はこれらの2つのテーブルを持っていることを考えてみましょう:

Transactions

------------------------------------- 
| TransactionId | Currency | Amount | 
------------------------------------- 
| 1    | EUR  | 15.00 | 
| 2    | EUR  | 39.50 | 
| 3    | USD  | 10.00 | 
------------------------------------- 

Transaction_Paths

--------------------------------------------------------------------------------- 
| TPathId | TPathType | TPathDirection | TPathLink | transactions_TransactionId | 
--------------------------------------------------------------------------------- 
| 1  | 'bank' | 'to'   | 1   | 1       | 
| 2  | 'bank' | 'from'   | 2   | 1       | 
| 3  | 'account' | 'from'   | 1   | 1       | 
| 4  | 'account' | 'to'   | 2   | 1       | 
| 5  | 'bank' | 'to'   | 3   | 2       | 
| 6  | 'bank' | 'from'   | 2   | 2       | 
| 7  | 'bank' | 'to'   | 4   | 3       | 
| 8  | 'account' | 'from'   | 1   | 3       | 
--------------------------------------------------------------------------------- 

基本的には、この2つのテーブルが私のサイト上で起こってトランザクションを格納しています、情報がありますTransaction_Pathsテーブル内のトランザクション。 Transactionsテーブルの各行には、Transaction_Pathsテーブルに複数の添付行があり、Transaction_paths.transactions_TransactionIdフィールドを使用している場合があります。

IDが1のアカウントから来る正確なトランザクションを照会し、ID番号が4の銀行toに行くクエリをどのように書くことができますか?

the previous question that I askedに基づいて、それに答えてHAVINGを使用する必要がありますが、2番目のテーブルに一致する複数の条件がある場合、どうすれば使用できますか?

EDIT:期待される結果は、次の3つを行う必要があり欲求出力を達成するために3

+0

サンプルデータに基づいて期待される結果を追加してください。 –

+0

@MHRaselそれを追加 –

答えて

2

TransactionIdで、ラインのように、Transactionsテーブルからのみ第三行を返すようにする必要がありますカスケード左結合Transaction_Paths左結合Transaction_Paths左結合トランザクション。最初の左結合(自己結合Transaction_Paths左結合Transaction_Paths)は条件なしですが、2番目の左結合はオンになります(Transaction_Paths.transactions_TransactionId = Transaction_Paths.TransactionId)。

私は次のようにあなたのアイデアを与えるために、このための擬似的なクエリを作っています

SELECT c.* 
FROM Transaction_Paths a 
LEFT JOIN Transaction_Paths b 
LEFT JOIN Transactions c ON (a.transactions_TransactionId = c.TransactionId) 
WHERE a.TPathDirection = "from" AND a.TPathLink = 1 AND b.TPathDirection = "to" AND b.TPathLink = 4 

は、あなたのお気に入りのクエリコンソールを使用して、適切なクエリを思い付くことができます願っています。スキムをフィーチャー(たとえばSQL fiddle)で共有すると、正確なクエリを作成してこの投稿を編集しようとします。

+0

@アダムBaranyai私は答えがあなたを助けたと思います。その場合、正確なクエリでクエリを更新し、将来のリーダーを支援するための答えを受け入れてください。 –

0

その間、私はM H Raselの答えを完全に忘れて、それを行う別の方法を見つけました。回答者の努力のために、私は彼の答えを受け入れたものとしてマークし、その間、誰かが私の答えをコメントすることができます。私のテストは、限られたものの、正確な結果を提供しました:

SELECT Transactions.* 
FROM Transactions 
INNER JOIN Transaction_Paths 
    ON Transaction_Paths.transactions_TransactionId = Transactions.TransactionId 
    WHERE Transaction.Currency = 'USD' AND 
     ((TransactionPaths.TPathDirection = 'from' AND TransactionPaths.TPathLink = '1')  
      OR (TransactionPaths.TPathDiretion= 'to' AND TransactionPaths.TPathLink = '4')) 
GROUP BY Transactions.TransactionId 
HAVING COUNT(distinct Transaction_Paths.TPathId) = 2 
関連する問題