SQL查询:使用多个值

时间:2017-11-22 06:08:39

标签: sql postgresql

我试图将多个表组合成一个我可以使用的json对象。希望我可以解释我想要做的事情。

我有3张桌子:

交易表

id,client,address,city,state,zip

座席表

id,first_name,last_name

agent_transaction

id,agent_id,transaction_id

以下是他们的联系方式:

transactions.id = agent_transaction.transaction_id

agent_transaction.agent_id = agents.id

单个事务可以有多个代理(插入agent_transaction)。我希望从SQL查询中获得以下内容:

获取每个事务的列表...以及分配给事务的所有代理...并收集代理信息(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功能,希望这可能会回归我正在寻找的东西。

由于

1 个答案:

答案 0 :(得分:0)

我相信我想出来了,使用STRING_AGG:

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;

我显然需要包括我所有的其他领域,但这似乎是我正在寻找的。