【问题标题】:How to do this JOIN to SELECT from 2 MySQL tables?如何从 2 个 MySQL 表中 JOIN 到 SELECT?
【发布时间】:2011-11-29 02:35:18
【问题描述】:

我对加入很陌生,到目前为止,我一直在做相对简单的加入,但这个让我很难过。

我有 2 个如下所示的表:

朋友桌

friendship_id | friend_init | friend_accept | status

1             | 18          | 10            | 1
2             | 13          | 18            | 0

用户表

user_id | email | username | password | kittens, etc...

10      | --    | --       | --       | --  
13      | --    | --       | --       | --
18      | --    | --       | --       | --

如果我尝试从朋友记录状态 = 1 的两个表中选择有关 user_id 18 的朋友的所有信息,联接会是什么样子?

【问题讨论】:

标签: mysql sql join


【解决方案1】:
SELECT users.*
FROM users JOIN friends ON friends.friend_accept = users.user_id
WHERE friend.friend_init = 18 AND friend.status = 1
UNION
SELECT users.*
FROM users JOIN friends ON friends.friend_init = users.user_id
WHERE friend.friend_accept = 18 AND friend.status = 1

如果您的数据库是对称的(您同时拥有(18,10)10,18),或者您只想从一侧查看友谊,请删除UNION...

【讨论】:

    【解决方案2】:
    Select * 
    from users
    LEFT join Friends 
      ON Users.User_ID = Friends.Friend_init 
      OR users.User_ID = Friends.Friend_Accept 
    Where Friends.Status = 1
    

    使用左连接是因为如果用户还没有朋友;用户仍会出现。

    【讨论】:

    • 最初的问题是关于用户的朋友,他没有说明他也想要用户的数据……如果他确实想要,LEFT JOIN 是个好主意。
    【解决方案3】:
    select * 
    from user u 
    join friends f
    on u.user_id = f.friends_accept
    where u.user_id = 18 and f.status = 1
    
    union
    
    select * 
    from friend f
    join user u
    on u.user_id = f.friend_status
    where u.user_id = 18 and f.status = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2015-02-21
      • 2016-07-21
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多