SQLite 在同一张表上两次加入

标签 sql sqlite join many-to-one

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

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

所以,p1 , p2p3是来自 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;

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

谢谢你。

最佳答案

是的,这是正确的方法。如果你知道 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 中拥有所需的一切.

性能应该不错,这是一个非常标准的查询。

关于SQLite 在同一张表上两次加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336641/

相关文章:

sqlite - 以编程方式检查核心数据实体是否已建立索引

Android 房间持久化库 : Upsert

php - 多个 SELECT 与使用 JOIN 的单个查询

sql - 在查找值上连接两个 SQL 表的最聪明方法

php - 如何在由 while 循环组成的表格内创建一个表单

sql - 如何将 Magento sql 查询显示为字符串?

python - 初始化几何类型的空列的合适值是多少

php - 当用户填写字段时减少相同输入的数量

android - 将 SQLite 数据库导入 Android 模拟器

MYSQL:查询未正确考虑最大日期时间列