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

Mostrar nombres cuando el codigo existe dos veces

Estas en el tema de Mostrar nombres cuando el codigo existe dos veces en el foro de Mysql en Foros del Web. Buenas, no se si el titulo sea claro, pero tengo una pequeña consulta sql que no he podido realizar.... Tengo las siguientes tablas: GEARESER GASCODIGO ...
  #1 (permalink)  
Antiguo 19/08/2011, 09:33
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Mostrar nombres cuando el codigo existe dos veces

Buenas, no se si el titulo sea claro, pero tengo una pequeña consulta sql que no he podido realizar....
Tengo las siguientes tablas:

GEARESER
GASCODIGO
GASNOMBRE

DGDIAGNO
DIACODIGO
DIANOMBRE

HCINTERC
GASCODIGO
GASCODIGO1
DIACODIGO
HCUTIPDIA

Yo necesito traer los nombres que hay en la tabla GEARESER para ambos codigos que tengo en HCINTERC (GASCODIGO y GASCODIGO1)

Lo tengo asi, pero por ahora solo he podido traer el nombre para GASCODIGO pero no para GASCODIGO1:

Código SQL:
Ver original
  1. SELECT A.GASCODIGO, A.GASNOMBRE, B.DIACODIGO,
  2. B.DIANOMBRE, C.HCUTIPDIA, C.GASCODIGO1
  3.  FROM GEARESER A INNER JOIN HCINTERC C
  4. ON A.GASCODIGO=C.GASCODIGO
  5.  INNER JOIN DGDIAGNO B
  6. ON B.DIACODIGO=C.DIACODIGO
  7. WHERE AINCONSEC='0000700724'

Como puedo mostrar el segundo nombre de GASNOMBRE para GASCODIGO1 ???

Agradezco me puedan ayudar, muchas gracias
  #2 (permalink)  
Antiguo 19/08/2011, 09:56
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Mostrar nombres cuando el codigo existe dos veces

Hola oscarbt:

Puedes hacer un doble join hacia la misma tabla, utilizando un alias. sería más o menos así:

Código:
SELECT G1.GASCODIGO, G1.GASNOMBRE, G2.GASCODIGO, G2.GASNOMBRE,
D.DIACODIGO, 
D.DIANOMBRE, 
h.HCUTIPDIA
FROM HCINTERC H 
INNER JOIN GEARESER G1 ON H.GASCODIGO = G1.GASCODIGO
INNER JOIN GEARESER G2 ON H.GASCODIGO1 = G2.GASCODIGO
INNER JOIN DGDIAGNO D ON D.DIACODIGO = H.DIACODIGO 
WHERE AINCONSEC='0000700724'
No sé si los alias de los campos quedaron correctos, pero es cuestión de que revises... y en cuanto al campo AINCOSEC no mencionas a qué tabla pertenece, igual y es necesario que le pongas también el alias respectivo.

Dale un vistazo al código para ver si es lo que necesitas y nos comentas los resultados

Saludos
Leo
  #3 (permalink)  
Antiguo 19/08/2011, 10:00
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Mostrar nombres cuando el codigo existe dos veces

Buenas, te cuento que con esa consulta no me muestra resultados, no muestra error pero tampoco resultados, ya he revisado y los alias y nombres de los campos estan bien...
  #4 (permalink)  
Antiguo 19/08/2011, 10:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Mostrar nombres cuando el codigo existe dos veces

¿Puedes poner algunos datos de ejemplo de tus tablas y qué es lo que necesitas de salida?

Saludos
Leo
  #5 (permalink)  
Antiguo 19/08/2011, 13:06
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Mostrar nombres cuando el codigo existe dos veces

OK aca va:

GEARESER
GASCODIGO : 1501
GASNOMBRE: HOSPITALIZACION PISO 2

GASCODIGO: 2001
GASNOMBRE: HOSPITALIZACION PISO 5

GASCODIGO: 3215
GASNOMBRE: TERAPIA INTENSIVA

DGDIAGNO:

DIACODIGO: 2688
DIANOMBRE: OTRO EFECTOS ...

HCINTERC

GASCODIGO:1501
GASCODIGO1:2001
DIACODIGO:D688
HCUTIPDIA: 1

GASCODIGO:1501
GASCODIGO1 : 3512
DIACODIGO: C961
HCUTIPDIA: 1

Con este query:
Código SQL:
Ver original
  1. SELECT A.GASCODIGO, A.GASNOMBRE, B.DIACODIGO, B.DIANOMBRE,
  2. C.HCUTIPDIA, C.GASCODIGO1  FROM
  3. GEARESER A INNER JOIN HCINTERC C
  4. ON A.GASCODIGO=C.GASCODIGO INNER JOIN DGDIAGNO B
  5. ON B.DIACODIGO=C.DIACODIGO
  6. WHERE AINCONSEC='0000700724'

me muestra lo siguiente:



Y yo necesito que me salga el GASNOMBRE respectivo del GASCODIGO1 2001 (HOSPITALIZACION PISO 5) y el 3512 (TERAPIA INTENSIVA).....
  #6 (permalink)  
Antiguo 19/08/2011, 14:43
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Mostrar nombres cuando el codigo existe dos veces

Hola de nuevo oscarbt:

Vayamos por partes... en primer lugar algo hay mal en tus datos, pues por ejemplo en tu tabla DGDIAGNO existe un registro con DIACODIGO = 2688, si embargo en la tabla HCINTERC lo estás poniendo como DIACODIGO = D688 . Por lo tanto NUNCA TE REGRESARÁ VALORES. No sé si fue error de dedo o hay alguna regla de negocio que no nos explicaste.

Segundo, en tu consulta estás manejando el campo AINCONSEC='0000700724', desde el post pasado te comenté que NO NOS DICES A QUÉ TABLA PERTENECE ESTE CAMPO, por lo tanto me es imposible tomarlo en cuenta.

Tercero, en tu tabla GEARESER estás manejando un registro con GASCODIGO = 3215, pero en la tabla HCINTERC tienes GASCODIGO1 = 3512 por lo tanto NUNCA REGRESARÁ VALORES PARA ESTE CASO.

Cuatro, en tu tabla HCINTERC tienes un registro con DIACODIGO = C961 pero en tu tabla DGDIAGNO NO TIENES NINGÚN REGISTRO ASIGNADO A ESTE CODIGO, por lo tanto TAMPOCO REGRESARÁ VALORES.

Tratando de adivinar cómo están realmente tus datos y sin considerar los aparentes "errores" que existen, la consulta deber funcionar, aquí te dejo un script de lo que estuve probando.

Código MySQL:
Ver original
  1. mysql> INSERT INTO GEARESER VALUES (1501, 'HOSPITALIZACION PISO 2'),
  2.     -> (2001, 'HOSPITALIZACION PISO 5'), (3215, 'TERAPIA INTENSIVA');
  3. Query OK, 3 rows affected (0.02 sec)
  4. Records: 3  Duplicates: 0  Warnings: 0
  5.  
  6. mysql> SELECT * FROM GEARESER;
  7. +-----------+------------------------+
  8. | GASCODIGO | GASNOMBRE              |
  9. +-----------+------------------------+
  10. |      1501 | HOSPITALIZACION PISO 2 |
  11. |      2001 | HOSPITALIZACION PISO 5 |
  12. |      3215 | TERAPIA INTENSIVA      |
  13. +-----------+------------------------+
  14. 3 rows in set (0.00 sec)
  15.  
  16. mysql> CREATE TABLE DGDIAGNO (DIACODIGO VARCHAR(5), DIANOMBRE VARCHAR(20));
  17. Query OK, 0 rows affected (0.09 sec)
  18.  
  19. mysql> INSERT INTO DGDIAGNO VALUES ('D688', 'OTRO EFECTOS ...'),
  20.     -> ('C961', 'LO QUE SEA ...');
  21. Query OK, 2 rows affected (0.03 sec)
  22. Records: 2  Duplicates: 0  Warnings: 0
  23.  
  24. mysql> SELECT * FROM DGDIAGNO;
  25. +-----------+------------------+
  26. | DIACODIGO | DIANOMBRE        |
  27. +-----------+------------------+
  28. | D688      | OTRO EFECTOS ... |
  29. | C961      | LO QUE SEA ...   |
  30. +-----------+------------------+
  31. 2 rows in set (0.00 sec)
  32.  
  33. mysql> CREATE TABLE HCINTERC (GASCODIGO INT, GASCODIGO1 INT,
  34.     -> DIACODIGO VARCHAR(5), HCUTIPDIA INT);
  35. Query OK, 0 rows affected (0.07 sec)
  36.  
  37. mysql> INSERT INTO HCINTERC VALUES (1501, 2001, 'D688', 1),
  38.     -> (1501, 3215, 'C961', 1);
  39. Query OK, 2 rows affected (0.03 sec)
  40. Records: 2  Duplicates: 0  Warnings: 0
  41.  
  42. mysql> SELECT * FROM HCINTERC H;
  43. +-----------+------------+-----------+-----------+
  44. | GASCODIGO | GASCODIGO1 | DIACODIGO | HCUTIPDIA |
  45. +-----------+------------+-----------+-----------+
  46. |      1501 |       2001 | D688      |         1 |
  47. |      1501 |       3215 | C961      |         1 |
  48. +-----------+------------+-----------+-----------+
  49. 2 rows in set (0.00 sec)
  50.  
  51. mysql> SELECT H.GASCODIGO, G1.GASNOMBRE, H.GASCODIGO1, G2.GASNOMBRE, D.DIANOMBRE
  52.     -> FROM HCINTERC H
  53.     -> INNER JOIN GEARESER G1 ON H.GASCODIGO = G1.GASCODIGO
  54.     -> INNER JOIN GEARESER G2 ON H.GASCODIGO1 = G2.GASCODIGO
  55.     -> INNER JOIN DGDIAGNO D ON D.DIACODIGO = H.DIACODIGO;
  56. +-----------+------------------------+------------+------------------------+----
  57. --------------+
  58. | GASCODIGO | GASNOMBRE              | GASCODIGO1 | GASNOMBRE              | DIA
  59. NOMBRE        |
  60. +-----------+------------------------+------------+------------------------+----
  61. --------------+
  62. |      1501 | HOSPITALIZACION PISO 2 |       2001 | HOSPITALIZACION PISO 5 | OTR
  63. O EFECTOS ... |
  64. |      1501 | HOSPITALIZACION PISO 2 |       3215 | TERAPIA INTENSIVA      | LO
  65. QUE SEA ...   |
  66. +-----------+------------------------+------------+------------------------+----
  67. --------------+
  68. 2 rows in set (0.00 sec)

Como podrás darte cuenta por las observaciones son muchos detalles que tendrías que aclararnos para darte una mejor respuesta. Ojalá que te sea de ayuda o que alguno de los demás foristas te apoye con la respuesta.

Saludos
Leo.
  #7 (permalink)  
Antiguo 19/08/2011, 16:05
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Mostrar nombres cuando el codigo existe dos veces

Ok, lo del codigo DIACODIGO fue error de ingreso mio, pero ya pude solucionarlo, muchas gracias por tu ayuda

Etiquetas: existe, join, nombres, select, sql, tabla, veces
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 07:18.