2011-09-07 48 views
0

我有一個表中有幾列包含另一個表的ID。 實施例:SQLite在同一個表上左連接兩次

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

所以,p1p2p3T2的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; 

是不是這個應該怎麼做?有什麼我應該擔心的速度問題?

謝謝。

回答

3

是的,這是正確的做法。如果您知道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

性能應該很好,這是一個非常標準的查詢。

+0

謝謝你,畝是正確的。我很感激。 – Francisc