【问题标题】:SELECT different users from same table in single JOIN在单个 JOIN 中从同一个表中选择不同的用户
【发布时间】:2014-03-26 10:21:04
【问题描述】:

我目前正在尝试将一个表(任务)与另一个表(用户)连接起来。我需要根据任务表中的值从用户表中选择不同的行:

tasks(user1, user2, user3);

users(id, name, email);

以前我使用 LEFT JOIN 链接数据,如下所示:

SELECT * FROM tasks LEFT JOIN users ON tasks.user1 = users.id;

这很简单,所以我尝试过像这样使用 AND:

SELECT * FROM tasks LEFT JOIN users ON tasks.user1 = users.id AND tasks.user2 = users.id;

但这会将用户字段返回为 NULL,这是有道理的,因为 tasks.user1 与 tasks.user2 不同

我现在很困惑如何做到这一点,欢迎所有建议!

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    您需要为每个连接列重复连接并为 users 表命名:

    SELECT * FROM tasks 
    LEFT JOIN users u1 ON tasks.user1 = u1.id 
    LEFT JOIN users u2 ON tasks.user2 = u2.id 
    ... 
    

    【讨论】:

    • 太好了,这将返回我需要的数据。我现在有一个列标题覆盖返回的数组中的数据的问题(我正在使用 PHP PDO),有没有办法可以制作查询以将每个用户作为 tasks.user* 值内的数组返回? (如果需要,我可以将其放入一个新的 SO 问题中?)
    • @MikeOram 我会发布一个新问题——我是根据 mysql / sql 标签来到这里的——听起来你需要一个 php pdo 大师。如果有帮助,您可以为列命名,即 SELECT tasks.col1, ..., u1.id AS User1ID, u1.name as User1Name, .. u2.id as User2ID, u2.Name as User2Name...
    【解决方案2】:

    使用这个:

    SELECT * 
    FROM tasks 
    LEFT JOIN users 
    ON tasks.user1 = users.id 
    OR tasks.user2 = users.id;
    

    【讨论】:

    • +1 - 这将起作用,前提是查询的其他地方不需要连接的上下文(即匹配的 user1user2)。
    • 感谢您的建议,但根据@StuartLC 的评论,我将使用他的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2016-05-14
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多