【问题标题】:SQL two lookups into same fields on one tableSQL 两次查找到一张表上的相同字段
【发布时间】:2013-02-16 02:52:43
【问题描述】:

我的表格如下所示:

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_id 的 user_name 以及 to_id 的 user_name?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您需要JOIN users 表两次——一次用于 from 用户,一次用于 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
    ;
    

    【讨论】:

    • 绝对漂亮。对我来说真正的障碍是连接上的别名。没有它,数据库会抱怨你已经加入了 users 表。
    • @Buddy -- np,很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多