【问题标题】:SQLite left joining twice on the same tableSQLite 在同一张表上离开了两次连接
【发布时间】:2025-11-24 17:20:07
【问题描述】:

我有一个表,其中有几列包含另一个表的 ID。 示例:

T1 {id,p1,p2,p3}
T2 {id,name}

所以,p1p2p3 是来自 T2 的 ID。 我想要做的是从T1 中选择所有,并从T2 中获得名称值。

这是我现在使用的:

select
     T1.id,T1.p1,T1.p2,T1.p3,
     T2a.name as p1_name,T2b.name as p2_name,T2c.name as p3_name
from
     T1 left join T2 as T2a on T1.p1=T2a.id
     left join T2 as T2b on T1.p2=T2b.id
     left join T2 as T2c on T1.p3=T2c.id;

这应该怎么做?有什么我应该担心的速度问题吗?

谢谢。

【问题讨论】:

    标签: sql sqlite join many-to-one


    【解决方案1】:

    是的,这是正确的做法。如果您知道 T2 将具有所有正确的值,那么您可以使用内连接而不是外连接:

    select T1.id,
           T1.p1, T21.name as p1_name,
           T1.p2, T22.name as p2_name,
           T1.p3, T23.name as p3_name
    from T1
    join T2 as T21 on T1.p1 = T21.id,
    join T2 as T22 on T1.p2 = T22.id,
    join T2 as T23 on T1.p3 = T23.id
    

    您可能想查看foreign keysT1 列,以确保您在T2 中拥有所需的一切。

    性能应该没问题,这是一个相当标准的查询。

    【讨论】: