【问题标题】:SQL - Join two tablesSQL - 连接两个表
【发布时间】:2012-05-01 23:49:07
【问题描述】:

我有两张桌子

用户:(id、姓名)

关系:(user_id,relation_id)

User_id 和relation_id 都是users 表中的id。

我想要的是恢复所有与特定用户为朋友的用户。

这是我的 sql 命令:不起作用:

SELECT *
FROM users
NATURAL JOIN relations
WHERE user_id IN (SELECT id FROM users WHERE name='John doe');

你能帮帮我吗?

【问题讨论】:

  • SELECT * FROM users JOIN relations on id = user_id WHERE user_id IN (SELECT id FROM users WHERE name='John doe');
  • 如何判断一个人是不是朋友?我知道它在关系表中,但它背后的逻辑是什么?
  • 谢谢,但它给我的名字总是 John doe...
  • @Vodemki 我相信大多数答案都是错误的,因为人们混淆了relation_id 和user_id。试试我的答案,它应该适合你。

标签: mysql sql join


【解决方案1】:

试试这个

SELECT * FROM users as a 
JOIN relations as b on a.id = b.user_id 
WHERE b.user_id IN (SELECT id FROM users WHERE name='John doe')

【讨论】:

  • @Vodemki 与您分享示例数据和所需结果,然后我可以进一步帮助您
  • 谢谢,但 Shedal 给了我解决方案。
【解决方案2】:
SELECT user_id
FROM relations re
JOIN users us
ON us.id = re.user_id
WHERE relation_id = (
    SELECT id
    FROM users
    WHERE name = 'John Doe'
)

旁注:您不能在此处使用NATURAL JOIN,因为这两个表中没有具有相同名称和类型的列。

【讨论】:

    【解决方案3】:
    SELECT users.*
    FROM relations
    INNER JOIN users
      ON relations.relation_id = users.id
    WHERE relations.user_id = 12345;
    

    您也可以使用子查询获取 id,就像您在示例中所做的那样:

    WHERE relations.user_id IN (SELECT id FROM users WHERE name='John doe');
    

    【讨论】:

      【解决方案4】:

      这不只是通过您要查找的 userId 查询关系表的问题吗?

      select * 
      from relations
      where  user_id = @IdYouArelookingFor or relation_id = @IdYouArelookingFor
      

      【讨论】:

        【解决方案5】:
        SELECT friend.*
        FROM users AS friend
          JOIN relations AS r
            ON r.relation_id = friend.id
          JOIN users AS u 
            ON u.id = r.user_id
        WHERE u.name = 'John doe' ;
        

        【讨论】:

          【解决方案6】:

          朋友是具有相同relation_id的人吗?

          SELECT a.name FROM users a JOIN relations b on a.id = b.user_id
          WHERE b.relation_id in 
          (select relation_id from relations where id = 'userid of user you are looking for') 
          AND a.id !=  'userid of user you are looking for'
          

          如果你的逻辑不同,请告诉它是如何工作的

          【讨论】:

            【解决方案7】:

            要获取一个人拥有的所有关系,以下查询将起作用..

            SELECT * FROM users us JOIN 关系 re ON us.id = re.relation_id 在哪里 re.user_id = ( 选择编号 来自用户 WHERE name = 'John doe' )

            【讨论】:

              猜你喜欢
              • 2012-02-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多