2013-01-05 66 views
0

我有一個表(聯繫人)和表(連接),它們都會自行解釋:SQLite表參照的SQLite本身

觸點表保存喜歡的ID,姓名,secondname信息,等等。 連接表在一列中保存聯繫人的ID,並在另一列中保存聯繫人的ID。

contacts 

id | firstname | secondname 
1 | test  | test 
2 | asdf  | asdf 
3 | qwer  | qwer 

connection 

id | contact_id | connection_to_id 
1 | 1   | 2 
2 | 1   | 3 

如何使查詢獲取一個聯繫人所連接的姓名? 我這個嘗試過,但它只是給了我一個名字後面,即使再連接:

SELECT 
    c.firstname, c.secondname 
FROM contacts c 
WHERE 
    c.id = 
    (SELECT 
     scon.connection_to_id 
    FROM connection scon 
    WHERE 
     scon.contact_id = 1) 

我只得到:

adsf asdf 

但我想:

adsf asdf 
qwer qwer 

我希望你能理解我的問題,並幫助我:)

+1

這是SQLite還是MySQL?子查詢應該返回多行,所以你應該使用'WHERE c.id IN(SELECT ....)' –

回答

2

最簡單的需要只是一個小的改變,該c.id =改變爲c.id IN

SELECT 
    c.firstname, c.secondname 
FROM contacts c 
WHERE 
    c.id IN 
    (SELECT 
     scon.connection_to_id 
    FROM connection scon 
    WHERE 
     scon.contact_id = 1) ; 

你也可以寫與EXISTS相關子查詢:

SELECT 
    c.firstname, c.secondname 
FROM contacts c 
WHERE 
    EXISTS 
    (SELECT 1 
    FROM connection scon 
    WHERE 
     scon.contact_id = 1 
     AND 
     scon.connection_to_id = c.id) ; 

或用JOIN(只要你沒有在重複的行connection表):

SELECT 
    c.firstname, c.secondname 
FROM contacts c 
    JOIN connection scon 
    ON scon.connection_to_id = c.id 
WHERE 
    scon.contact_id = 1 ; 
1

使用WHERE c.id IN (SELECT ...),即,IN而不是=。