mysql query two tables, UNION and where clause
There are two problems with your SQL:
(THis is not the question, but should be considered) by using
WHERE
over theUNION
instead of the tables, you create a performance nightmare: MySQL will create a temporary table containing theUNION
, then query it over theWHERE
. Using a calculation on a field (LOWER(requester_name)
) makes this even worse.The reason you get two rows is, that
UNION DISTINCT
will only suppress real duplicates, so the tuple(someuser,peter)
and the tuple(someotheruser, peter)
will result in duplication.
Edit
To make (someuser, peter)
a duplicate of (peter, someuser)
you could use:
SELECT
IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
...
UNION
SELECT
IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
...
So you only select someuser
which you already know : peter
You need the where clause on both selects:
select requester_name, receiver_name
from poem_authors_follow_requests
where LOWER(requester_name) = LOWER('user1') or LOWER(receiver_name) = LOWER('user1')
union
select requester_name, receiver_name
from poem_authors_friend_requests
where LOWER(requester_name) = LOWER('user1') or LOWER(receiver_name) = LOWER('user1')
The two queries are independent of each other, so you shouldn't try to connect them other than by union
.