1

次のようなテーブルがあります。

create table users (
    user_id uuid,
    user_name varchar(32)
);

create table messages (
    message_id uuid,
    from_id uuid references users(user_id),
    to_id uuid references users(user_id),
    the_message varchar(140),
    primary key(message_id)
);

私が次のことをした場合:

select * from messages

UUIDが与えられます。指定されたuuidのusers.user_nameを表示したいと思います。これは私を近づけます:

select
    users.user_name as from_id,
    users.user_name as to_id
from messages
    join users on users.user_id = messages.from_id
;

結果には、「from」フィールドと「to」フィールドの両方に同じユーザーが表示されます。

from_idのuser_nameとto_idのuser_nameを表示するにはどうすればよいですか?

4

1 に答える 1

3

ユーザーテーブルを2回使用する必要がJOINあります。1回はfromユーザー用、もう1回はtoユーザー用です。

select
    messages.*,
    f.user_name as from_id,
    t.user_name as to_id
from messages
    join users f on f.user_id = messages.from_id
    join users t on t.user_id = messages.to_id
;
于 2013-02-16T02:54:58.757 に答える