2017-11-22 21 views
1

私は使用できるjsonオブジェクトに複数のテーブルを結合しようとしていません。うまくいけば、私は何をしようとしているのか説明することができます。SQLクエリ:複数の値を持つ3つのテーブルを結合する

私は3つのテーブルを持っている:

取引テーブル

ID、クライアント、住所、市、州は、

エージェントテーブル

ID、FIRST_NAME、LAST_NAME

ジップ

ag ent_transaction

ID、agent_idには、ここで


をTRANSACTION_IDそれらはすべて一緒に縛られている方法は次のとおりです。

transactions.id = agent_transaction.transaction_id

agent_transaction.agent_id = agents.id


leトランザクションは複数のエージェントを持つことができます(agent_transactionに挿入されます)。

トランザクションに割り当てられているすべてのエージェントと一緒に各トランザクションのリストを取得し、エージェントの情報を収集します(first_name、last_name、等)。

alltransactions:[{

id: 20 
client: Joe Smith 
address: 123 Fake Dr 
city: Phoenix 
state: AZ 
zip: 85248 
agents:{ 
    agent_id: 39 
    first_name: John 
    last_name: Doe 
},{ 
    agent_id: 40 
    first_name: Kelly 
    last_name: Parker 
},{ 
    agent_id: 41 
    first_name: Carl 
    last_name: Williams 
} 

}、{

id: 21 
client: Mary Swamson 
address: 240 Someplace Dr 
city: Seattle 
state: WA 
zip: 98233 
agents:{ 
    agent_id: 12 
    first_name: Billy 
    last_name: Banks 
},{ 
    agent_id: 98 
    first_name: Sharon 
    last_name: Gandt 
} 

} ]私が使用して試した

だから、それは次のようになりますいくつかの内部結合が、返されたすべてのエージェントに対して重複したトランザクション行を取得します。 STRING_AGG関数を使って、私が探しているものを返すことができると期待しています。私はSTRING_AGGを使用して、それを考え出したと信じて

おかげ

+0

クエリからリテラルJSON出力を取得するには、MySQL(Postgres?)が提供するJSONライブラリを使用する必要があります。結合から見ている複製が必要です。 –

+0

@Tim BiegeleisenありがとうTim。 JSONの出力は私の問題ではない、私はそれを世話することができます。 psqlから簡単なSQLクエリを実行しようとしても、重複したトランザクションが返されています(返される各エージェントごとに1つ)。一意のトランザクションを取得する方法はありますか、エージェント情報を各結果内の配列として並べていますか?私は実際に取引の詳細とそれに割り当てられたすべてのエージェントを知る必要があります。 – TemeCal

+0

postgresqlのSTRING_AGG関数が私の望んだことをするかもしれないと思っています。 – TemeCal

答えて

0

SELECT t.id,t.address, STRING_AGG(a.first_name, ';') AS agents FROM trans AS t 
    INNER JOIN agent_trans AS at ON (t.id = at.transaction_id) 
    INNER JOIN agents AS a ON (a.id = at.user_id) 
    GROUP BY t.id,t.address 
    ORDER BY t.id; 

私は明らかに私の他のすべてのフィールドを含める必要があるが、これは私が探しているものをのようです。

関連する問題