mysql连接三个表,同一个表连接两次

mysql连接三个表,同一个表连接两次,mysql,laravel,Mysql,Laravel,我有三张桌子 1) 用户-有1个外键,state_id,在states上引用id 2) 用户详细信息-有2个外键 -引用用户id的用户\u id -属性\状态\引用状态上的id的id 3) 州 如何连接这3个表,以便我有用户信息、用户详细信息以及来自state_id和property_state_id的状态信息 我是用拉威尔的方式写的 User::where('users.id', $id) ->leftJoin('states', 'users.state_id'

我有三张桌子

1) 用户-有1个外键,state_id,在states上引用id 2) 用户详细信息-有2个外键 -引用用户id的用户\u id -属性\状态\引用状态上的id的id

3) 州

如何连接这3个表,以便我有用户信息、用户详细信息以及来自state_id和property_state_id的状态信息

我是用拉威尔的方式写的

User::where('users.id', $id)
            ->leftJoin('states', 'users.state_id', '=', 'states.id')
            ->leftJoin('user_details', 'user_details.user_id', '=', 'users.id')
            ->first();

看来我不能两次加入美国队了。这可能有什么解决方案?

您可以在联接中多次联接同一个表,但需要提供表别名(以下示例代码中的s1和s2):


可以在联接中多次联接同一个表,但需要提供表别名(以下示例代码中的s1和s2):


是的,您可以,只需要使用表别名。是的,您可以,只需要使用表别名。
User::where('users.id', $id)
        ->leftJoin('states as s1', 'users.state_id', '=', 's1.id')
        ->leftJoin('user_details', 'user_details.user_id', '=', 'users.id')
        ->leftJoin('states as s2', 'user_details.property_state_id', '=', 's2.id')
        ->first();