Bienvenido a proyecto on line, ahora hallarás la resolución a lo que estás buscando.
Hay dos problemas con su SQL:
-
(Esto es no la pregunta, pero debe ser considerado) usando
WHERE
sobre elUNION
en lugar de las tablas, crea una pesadilla de rendimiento: MySQL creará una tabla temporal que contiene elUNION
luego consúltelo sobre elWHERE
. Usando un cálculo en un campo (LOWER(requester_name)
) lo empeora aún más. -
La razón por la que obtienes dos filas es que
UNION DISTINCT
solo suprimirá los duplicados reales, por lo que la tupla(someuser,peter)
y la tupla(someotheruser, peter)
resultará en una duplicación.
Editar
Para hacer (someuser, peter)
un duplicado de (peter, someuser)
podrías usar:
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
...
Entonces solo seleccionas someuser
que ya sabes: peter
Necesitas la cláusula where en ambas cosas selecciona:
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')
Las dos consultas son independientes entre sí, por lo que no debe intentar conectarlas de otra manera que no sea union
.
Si te animas, tienes la libertad de dejar un ensayo acerca de qué le añadirías a este enunciado.