0

SQLite にテーブル (連絡先) とテーブル (接続) があります。

連絡先テーブルには、id、firstname、secondname などの情報が保持されます。接続テーブルは、連絡先の ID を 1 つの列に保持し、接続先の連絡先の 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

ある連絡先が接続されている名前を取得するクエリを作成するにはどうすればよいですか? これで試してみましたが、複数の名前が接続されていても、返される名前は 1 つだけです。

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 に答える