简体   繁体   中英

pull data from two tables

I need to pull data from two tables, and it's a bit over my head :

The first tables contains a list of members (member_id, username, email ...) The second table stores relations between members (id, member_id, friend_id)

When a member adds another member as a friend, both member_ids are stored in the second table.

Now I need to output that second table, I'd like to output usernames instead of numbers :

example :

{username corresponding to member_id} added {username corresponding to friend_id} as a friend

Can someone help with the query ?

You need to perform a double join on members

SELECT mem1.username, mem2.username
FROM members mem1 
 INNER JOIN relations
   ON mem1.member_id = relations.member_id
 INNER JOIN member mem2
   ON relations.friend_id = mem2.member_id

Check the accepted answer on this question: How do you join on the same table, twice, in mysql?

You'll just have to join the second table twice.

Something like:

select tb1.username as member_name,
       tb2.username as friend_name
from   membertable as tb1
inner join
(
       membertable as tb2,
       memberrelationstable
)
on
(
    tb1.member_id = memberrelationstable.member_id and
    tb2.member_id = memberrelationstable.friend_id
)

This is how I would do it:

SELECT member.username AS member_username, friend.username AS friend_username
FROM relations

INNER JOIN members AS member
ON relations.member_id = member.member_id

INNER JOIN members AS friend
ON relations.friend_id = mem2.member_id

I've spaced it so that you can easily see how we're joining the members table twice, and simple giving it a different name both times.

Whenever something is followed by AS, it means that you're giving it another name. This allows you to use the same table multiple times in a single query.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM