Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] INNER JOIN con CASE ?

Estas en el tema de INNER JOIN con CASE ? en el foro de Mysql en Foros del Web. Hola buen día, ya estuve indagando un poco sobre esto, pero la verdad no me queda claro, como puedo hacer un inner join mediante case? ...
  #1 (permalink)  
Antiguo 04/08/2016, 15:04
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 8 años, 11 meses
Puntos: 20
INNER JOIN con CASE ?

Hola buen día,
ya estuve indagando un poco sobre esto, pero la verdad no me queda claro,
como puedo hacer un inner join mediante case?
Por ejemplo:

Código MySQL:
Ver original
  1. SELECT u.Id,u.Usuario,u.Password,u.TipoUsuario,T.Nombre FROM
  2. Usuario as u
  3. CASE u.TipoUsuario
  4. WHEN 'admin' THEN INNER JOIN Administrador as T on u.Id = T.IdUsuario
  5. WHEN 'director' THEN INNER JOIN Director as T on u.Id = T.IdUsuario

Es sólo un ejemplo, obviamente lo probé y no se ejecuta

Es posible hacer esto de alguna manera?
Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 04/08/2016, 15:23
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: INNER JOIN con CASE ?

Hola german_1441:

Lo que quieres hacer, lamentablemente no se puede... Sin embargo hay otras técnicas que te pueden "ayudar" a hacer una consulta como lo que pretendes.

Si entendí correctamente, el campo u.TipoUsuario puede estar asociado a la tabla Administrador y/o a la tabla Director.

Podrías cambiar tus INNER JOIN's por LEFT JOIN's, si el campo NO TIENE RELACIÓN CON LA TABLA entonces regresa un valor NULL, de tal suerte que en el SELECT simplemente pones una condición IFNULL para mostrar sólo el que tenga valor, sería algo así;

Código MySQL:
Ver original
  1.    u.Id,
  2.    u.Usuario,
  3.    u.Password,
  4.    u.TipoUsuario,
  5.    IFNULL(a.Nombre, d.Nombre) nombre
  6.    usuario as u
  7. LEFT JOIN administrador A on u.Id = a.IdUsuario
  8. LEFT JOIN director as d on u.Id = d.IdUsuario

El único detalle puede estar en si el ID está en AMBAS TABLAS... en este caso siempre mostrará el valor de la tabla A, pero puedes agregar otra condición si es que quieres hacer algo distinto en este caso.

Haz la prueba y nos comentas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 04/08/2016, 15:50
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 8 años, 11 meses
Puntos: 20
Respuesta: INNER JOIN con CASE ?

Amigo leonardo_josue muchas gracias!!
Me ha sido de gran ayuda tu respuesta, te lo agradezco!
Respecto a lo que comentas del Id, afortunadamente no se repite jeje,
De hecho, no quiero venir a hacer desorden a este foro y espero no inflingir una de sus reglas, pero quisiera hacerte una consulta y no creo necesario abrir otro tema (eso creo )

En mi BD tengo 4 tablas
Usuario, Administrador, Gerente, Empleado (los ultimos 3 son tipos de usuario)

Pensé hacerla así, ya que cada tipo de usuario tendrá diferentes datos,
en mi tabla Usuario únicamente guardaré datos para hacer login, y de acuerdo al tipo registraré/consultaré en su correspondiente tabla.
Crees que exista algún inconveniente en hacer esto?
o era preferible dejar todo en la tabla Usuario?
Te agradezco nuevamente amigo, saludos!!
  #4 (permalink)  
Antiguo 10/08/2016, 09:58
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: INNER JOIN con CASE ?

Pienso que si todos son usuarios pero digamos, con diferentes privilegios lo más lógico es que pertenezcan a la misma tabla con una columna que identifique el tipo y/o los pivilegios, y si es necesario una tabla o más para los diferentes datos que no sean comunes a todos los usuarios.
__________________
Unset($vida['malRollo']);
  #5 (permalink)  
Antiguo 24/08/2016, 14:02
 
Fecha de Ingreso: diciembre-2015
Ubicación: México
Mensajes: 280
Antigüedad: 8 años, 11 meses
Puntos: 20
Respuesta: INNER JOIN con CASE ?

Te agradezco tu respuesta amigo.
Te comento que seguí trabajando de la forma que puse en los comentarios anteriores y la verdad si es algo "molesto" ( no lo es tanto en realidad :p ) estar haciendo inner join de mi tabla Usuarios con su respectiva tabla acorde al tipo de usuario.
Sin embargo, creo q se entienden más las tablas y no queda todo en una sóla (tabla Usuario)
Saludos!

Etiquetas: case, join, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.