Saltar al contenido

mysql consulta dos tablas, UNION y cláusula where

Bienvenido a proyecto on line, ahora hallarás la resolución a lo que estás buscando.

Hay dos problemas con su SQL:

  1. (Esto es no la pregunta, pero debe ser considerado) usando WHERE sobre el UNION en lugar de las tablas, crea una pesadilla de rendimiento: MySQL creará una tabla temporal que contiene el UNIONluego consúltelo sobre el WHERE. Usando un cálculo en un campo (LOWER(requester_name)) lo empeora aún más.

  2. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *