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

Consulta sql

Estas en el tema de Consulta sql en el foro de Bases de Datos General en Foros del Web. Qué tal, he estado intentando hacer la siguiente consulta pero por 'x' motivos no funciona: Listar el nombre y el tipo de los profesores que ...
  #1 (permalink)  
Antiguo 04/11/2011, 13:54
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 14 años
Puntos: 5
Pregunta Consulta sql

Qué tal, he estado intentando hacer la siguiente consulta pero por 'x' motivos no funciona:

Listar el nombre y el tipo de los profesores que dictan materias en la carrera de CI y que tengan la máxima categoría.

en mi tabla empleados(cod_empleado,nombre,etc) y tipo de empleado(cod_tipo_de empleado,descripcion).

Ahora, como mi tabla empleado tiene como FK a cod_tipo_de_empleado, yo quiero que se visualice la 'descripcion' de la tabla tipo de empleado y no el 'cod_tipo_empleado', eso si lo he hecho:

Código SQL:
Ver original
  1. SELECT nombre,descripción FROM empleados,tipo_empleados  WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tipo_empleado

Todo bien hasta ahí, pero en la condición dependiendo de la maxima categoria (que este caso es 'A1') no funciona:

Código SQL:
Ver original
  1. SELECT nombre,descripción FROM empleados,tipo_empleados  WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tipo_empleado  
  2.  AND cod_car='00000001' HAVING cod_cat_empleado=(SELECT MIN(descripción) FROM categoria_empleados)

He puesto MIN porque en este caso A1 sería el mayor, si pondría MAX me visualizaría por decir A9.


Espero que puedan ayudarme...
  #2 (permalink)  
Antiguo 04/11/2011, 14:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulta sql

y porque no pones directo

WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tip o_empleado
AND cod_car='00000001' and cod_cat_empleado='A1'


Si va a cambiar la categoria porque no pones tu min directamente en el where?

SELECT nombre,descripción FROM empleados,tipo_empleados WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tip o_empleado
AND cod_car='00000001' and cod_cat_empleado=(SELECT MIN(descripción) FROM categoria_empleados)


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/11/2011, 14:36
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 14 años
Puntos: 5
Respuesta: Consulta sql

Cita:
Iniciado por Libras Ver Mensaje
y porque no pones directo

WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tip o_empleado
AND cod_car='00000001' and cod_cat_empleado='A1'


Si va a cambiar la categoria porque no pones tu min directamente en el where?

SELECT nombre,descripción FROM empleados,tipo_empleados WHERE tipo_empleados.cod_tipo_empleado=empleados.cod_tip o_empleado
AND cod_car='00000001' and cod_cat_empleado=(SELECT MIN(descripción) FROM categoria_empleados)


Saludos!
Supongamos que en el caso de que la maxima categoria no sea A1 sino A94223 (Sólo por decir), pero en ese caso yo no sabría cual sería la máxima categoria ya que eso se va agregando solo por el usuario(solo por decir). En ese caso yo no sabría que poner en una consulta
Código SQL:
Ver original
  1. WHERE cod_cat_empleado=A'x'
donde 'x' representa la maxima categoria. Por esa razón, con la ayuda del MIN o MAX quiero sacar el maximo o minimo ya sea el caso que corresponda.


P.D: Sí había hecho eso, pero quiero hacerlo de la manera que te digo.

saludos!

P.D2: Alguien con alguna idea?
  #4 (permalink)  
Antiguo 04/11/2011, 14:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Consulta sql

Porque dices que tu query no funciona? como tienes tus categorias? podrias poner datos de ejemplo de tus tablas y lo que quieres lograr??

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/11/2011, 18:00
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 14 años
Puntos: 5
Respuesta: Consulta sql

Hey! xd...Ya me dí cuenta cual fue mi error. Tengo 2 descripciones (descripción(de la tabla tipo_de_empleado y descripcion(de la tabla cod_categoria_empleado)*Nótese la tílde.

Ahora en la última parte sobre:

Código SQL:
Ver original
  1. AND cod_cat_empleado=(SELECT MIN(descripción) FROM categoria_empleados)

Estoy comparando el codigo, que es; ejemplo: '00000001', con la descripcion que sería 'A1'..
Por eso que no se puede hacer la comparación ( 0000001='A1'). En todo caso cómo podría para hacer que me compare asi:
Código SQL:
Ver original
  1. AND descripcion=(SELECT MIN(descripcion) FROM categoria_empleados)

Si al principio del query puse:

SELECT nombre,descripción FROM empleados,tipo_empleados

Y ahi no estoy tomando la descripcion de categoria_empleados sino de tipo_de_empleado...

Espero tu respuesta, gracias xd...
  #6 (permalink)  
Antiguo 05/11/2011, 19:28
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 14 años
Puntos: 5
Respuesta: Consulta sql

Vamos necesito ayuda, porfa!
  #7 (permalink)  
Antiguo 05/11/2011, 20:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta sql

Pareces tener múltiples problemas en el asunto, no sólo de SQL....
Cita:
Supongamos que en el caso de que la maxima categoria no sea A1 sino A94223 (Sólo por decir), pero en ese caso yo no sabría cual sería la máxima categoria ya que eso se va agregando solo por el usuario(solo por decir). En ese caso yo no sabría que poner en una consulta
Según eso, tienes un esquema de categorías mal definido, el cual no se puede usar para determinar categorías mayores o menores. Por decirlo fácilmente, una categoría de tipo "A2" resulta ser mayor que una "A123", lo cual no parece lógico porque el 2 es menor que el 123...
Normalmente eso se resuelve separando ese esquema en dos columnas, una alfabética y otra numérica, con lo que se puede obtener mayor precisión. Pero es una solución que no has considerado.

Cita:
Estoy comparando el codigo, que es; ejemplo: '00000001', con la descripcion que sería 'A1'..
Por eso que no se puede hacer la comparación ( 0000001='A1'). En todo caso cómo podría para hacer que me compare asi:
En realidad es un problema demasiado elemental: Lo que tienes que indicar es exactamente cuál es la tabla y el campo a comparar, para que no haya confusones. Es un problema de dejar que MySQL resuelva las igualdades, cuando tienes columnas de dos o más tablas con el mismo nombre: Eso requiere una sintaxis mucho más precisa.
Por otro lado, usar MAX() o MIN() con un campo alfanumérico, como ya dije, es un error porque resulta muy impreciso. Lo mejor es resolver el tema de una forma más precisa con INNER JOIN, como por ejemplo, podríamos probar:

Código MySQL:
Ver original
  1.     E.nombre,
  2.     C.descripción
  3.     empleados E
  4.     INNER JOIN tipo_empleados T ON E.cod_tipo_empleado = T.cod_tipo_empleado
  5.     INNER JOIN (SELECT MAX(cod_cat_empleado) cod_cat_empleado FROM categoria_empleados) C ON E.cod_cat_empleado = C.cod_cat_empleado
  6.     E.cod_car='00000001'

Estoy suponiendo el nombre de algunos campos, porque no nos diste la estructura exacta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 06/11/2011, 11:08
Avatar de edbc92  
Fecha de Ingreso: octubre-2010
Ubicación: Lima - Los Olivos
Mensajes: 93
Antigüedad: 14 años
Puntos: 5
Respuesta: Consulta sql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pareces tener múltiples problemas en el asunto, no sólo de SQL....
Bueno es que solo estoy suponiendo que la categoria (A1) va ser igual a un empleado destacado por eso el 1 seria en este caso el mayor, eso si lo expliqué mas arriba; si no me equivoco. En fin en la ultima parte de la sentencia tengo que comparar descripcion(no el cod_cat_empleado)=A1 ._. ...Creo que me estoy haciendo mucha bola, jejeje...En fin aún no soy experto, ni mucho menos DBA, esto es una tarea del intituto que tendría que presentar para hoy día. No me queda de otra que esperar hasta mañana para pedirle ayuda al profe de programación que también su fuerte es acá.

De todas maneras gracias por la ayuda dada :D
  #9 (permalink)  
Antiguo 06/11/2011, 11:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta sql

Cita:
(...) En la ultima parte de la sentencia tengo que comparar descripcion(no el cod_cat_empleado)=A1 (...)
¿Pero no estás diciendo que en tipo_de_empleado.descripción no tienes el mismo tipo de datos que en cod_categoria_empleado.descripcion?
La solución es entonces ¿dónde tenes en las tablas los datos que permitan establecer cuál es la categoría más alta?

Sería mejor, para poder ayudarte en la solución, que nos muestres exactamente cómo es la estructura de las tablas que estás trabajando. Y por estructura no me estoy refiriendo a que las describas, sino que pongas el CREATE TABLE de cada una.
Insisto en el CREATE table, porque los foristas, cuando describen manualmente sus tablas no suelen incluir información importante que sólo se ve bien cuando posteas la sentencia de creación.

Postea los CREATE TABLE, dinos cómo son los datos que van en las columnas que relacionan las tablas y veremos cómo resolver bien este entuerto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql
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 23:08.