【问题标题】:SQL - join selected data or table for conditionsSQL - 为条件连接选定的数据或表
【发布时间】:2016-09-03 08:33:54
【问题描述】:

我有用于用户和关系的 SQL 表,例如 用户{ID、姓名、电子邮件} 关系{ID、uid、relid、类型}

我想通过 SQL、使用 JOIN 或其他方式获取所有“朋友”ID、姓名和电子邮件(按当前用户 ID)。

如果使用 join 是加入用户表并选择关系还是选择关系并加入用户更好?

类似的东西(我现在发明了,我使用了一些不同的表和代码,抱歉有错误)

1:

SELECT DISTINCT u.ID, u.name, u.email FROM users u JOIN relationships r ON (r.uid = 1 OR r.relid = 1) AND r.type = 1 WHERE u.ID = r.uid OR u.ID = r.relid

2:

SELECT DISTINCT u.ID, u.name, u.email FROM relationships r JOIN users u ON r.uid = u.ID OR r.relid = u.ID = 1 WHERE r.uid = u.ID OR r.related = u.ID

编辑: 我使用 DISTINCT 因为当我选择 ID 等于 r.uid 或 r.related 的用户时,我还会为每个关系获取当前用户(uid + 相关)。 DISTINCT 应​​该使用户唯一吗?我是初学者,在 stackoverflow 上找到了这个。

那么,是从用户中选择并加入关系还是选择关系并加入用户更好?

顺便说一句:我非常喜欢 UNION 的答案

【问题讨论】:

    标签: php mysql database join inner-join


    【解决方案1】:

    您可以联合uid和relid中用户所在的用户。

    SELECT users.*
    FROM users
    INNER JOIN relationships AS rel
    ON users.ID = rel.uid
    WHERE users.ID = 500
    
    UNION
    
    SELECT users.*
    FROM users
    INNER JOIN relationships AS rel
    ON users.ID = rel.relid
    WHERE users.ID = 500
    

    【讨论】:

      【解决方案2】:

      不确定您为什么使用DISTINCT,但您似乎只想从关系表(朋友)中选择所有行,然后从用户表中加入他们的详细信息。

      SELECT u.id, u.name, u.email
      FROM relationships r
      LEFT JOIN users u ON u.id = r.uid
      WHERE r.uid = 12345
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        相关资源
        最近更新 更多