0

我在 SQLite 中有一个表(联系人)和一个表(连接),它们非常不言自明:

联系人表包含 id、firstname、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

我希望你能理解我的问题并帮助我:)

4

2 回答 2

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 ;
于 2013-01-05T13:24:00.197 回答
1

使用WHERE c.id IN (SELECT ...),即IN代替 =。

于 2013-01-05T13:24:18.777 回答