Es que el hecho de que estés usando dos tablas para lo que deberías usar cuatro, dificulta la cosa.
Me explico: En un modelo desarrollado sobre la base del paradigma E-R, no puedes mezclar entidades que representan cosas
distintas, como so Usuarios, Clientes y Contactos. Cada una de ellas debería ser una entidad separada ya que los atributos de cada una suelen ser diferentes, más allá de compartir un conjunto de ellos.
Lo que suele hacerse para evitar problemas es crear una Entidad Persona, de la que dependan las tres en cuestión. A su vez, estas tres tienen entre si relaciones N:N que definirían dos tablas mas, por lo que el esquema debería ser de al menos seis tablas.
Tamaña atomización puede parecerte excesiva, pero el resultado de eso es una escritura mucho más simple de las consultas, un mejor aprovechamiento del espacio de almacenamiento, y la consistencia de no sumar caballos con manzanas.
En cualquier caso, es posible hacer lo que pides con las tablas como las tienes, pero hace que las consultas sean algo complicadas...
Por lo pronto, tienes que definir el razonamiento en forma escalar. Primero crea las consultas que recuperan los bloques a usar, y luego realiza la integración.
Al como:
- Obtener los Usuarios y Clientes:
- Obtener los Clientes y Contactos:
- Obtener los Usuarios y Contactos:
El problema se complica a la hora de integrar estas tres en una sola, algo más elaborada...
Esta es sólo una aproximación, puede que no te de el resultado esperado porque no tengo como verificarla:
Código MySQL:
Ver originalWHERE u.id_ucat
= 'Usuario' AND au.id_ucat
= 'Contacto') SELECT TC.id_usuario
, TC.apellido_empresa
, TC.id_contacto
WHERE u.id_ucat
= 'Usuario' AND au.id_ucat
= 'Cliente') T3
WHERE u.id_ucat
= 'Cliente' AND au.id_ucat
= 'Contacto') T4
ON T3.id_cliente
= T4.id_contacto
) TC
;
Para que puedas apreciar la diferencia, esto sería un ejemplo de consulta usando un esquema como el que te describía más arriba:
Código MySQL:
Ver originalSELECT U.id_usuario
, U.apellido_empresa
, C.id_contacto
SELECT U.id_usuario
, U.apellido_empresa
, C.id_contacto
¿Se aprecia la simplicidad?
A veces lo que parece darnos cosas fáciles de programar, en realidad nos complica la vida a largo plazo.