I am quite new to MySQL and i wanted to write a query for my MariaDB database. I have a user and a Contacts table. The contacts table contains two foreign keys and the user table contains an email and a user id. What i want to do is return the emails and the id of all contacts of a given user Id. I used the variable because the id of the user we are searching for can be the first or second id in a contact relation.
The following
SELECT id,
email,
@use := IF(first_id = 25, second_id, first_id)
FROM contacts
INNER JOIN user
ON @use = user.id
WHERE first_id = 25
OR second_id = 25;
25 is the user id in this case and this query is returning the following result.
+----+-------------------------+-------------------------------------------+
| id | email | @use:= IF(first_id=25,second_id,first_id) |
+----+-------------------------+-------------------------------------------+
| 23 | secretemail@gmail.com | 23 |
| 23 | best.secretem@yahoo.com | 24 |
| 24 | wow.spa@web.de | 23 |
+----+-------------------------+-------------------------------------------+
What confusing to me is, that the ids do not match when using the inner join. Thanks in advance!
You can use IN ()
to match with multiple columns.
SELECT u.id,
u.email
FROM contacts AS c
INNER JOIN user AS u ON user.id IN (c.first_id, c.second_id)
WHERE 25 IN (c.first_id, c.second_id)
AND u.id != 25 -- don't return the user whose contact are being listed