对具有一对多关系的表执行双向连接查询

问题描述 投票:0回答:1

我希望我的两个表之间存在双向关系,这种关系与一对多的关系有关。

所以,我有一个User表,其中包括user_idtransaction_id等列(以及其他用户数据列)。

我有另一个名为transaction的表,它有像transaction_iduser_id这样的列(用于指代此特定事务所属的用户)。

现在,问题是,特定用户可以附加多个事务,这意味着,此事务表可以为同一用户提供多行。这使我可以通过连接查询轻松获取用户详细信息。但我想把这种关系双向化。

如果我拥有的是用户详细信息,我应该能够获得该人的交易详情。但是,因为用户可以同时拥有多个事务,我无法编写连接查询。

因此,我还没弄明白如何为特定用户存储两个事务ID,请记住我应该能够创建一个具有用户详细信息的连接查询(我总是可以以数组的形式存储事务ID) ,但这不会让我的连接查询发生)。

mysql sql
1个回答
0
投票

假设这个表结构:

交易

id
user_id
tdate
amount

用户

id
name
email

您似乎已经意识到您可以列出用户的所有交易及其信息:

SELECT
    u.id,
    u.name,
    u.email,
    t.id,
    t.tdate,
    t.amount
FROM 
    users u
    INNER JOIN transactions t ON t.user_id = u.id
WHERE
    u.id = ?
ORDER BY 
    u.id, 
    t.tdate

问号代表您想要查看其交易的用户的id。这将为用户的每个事务返回一条记录。

如果您希望,对于给定的事务,列出同一用户的所有其他事务,那么一个解决方案是向查询添加另一个连接:基本上,这将首先通过id(t0)检索给定的事务,然后列出由同一个用户(t)进行的所有交易。

SELECT
    u.id,
    u.name,
    u.email,
    t.id,
    t.tdate,
    t.amount
FROM 
    users u
    INNER JOIN transactions t0 ON t0.user_id = u.id
    INNER JOIN transactions t ON t.user_id = u.id
WHERE
    t0.id = ?
ORDER BY 
    u.id, 
    t.tdate
© www.soinside.com 2019 - 2024. All rights reserved.