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

problema al unir dos tablas

Estas en el tema de problema al unir dos tablas en el foro de Bases de Datos General en Foros del Web. Buenas, Necesito hacer una sentencia para unir dos tablas de SQLServer y mostrar el resultado en una web con asp.net Necesito mostrar el nombre del ...
  #1 (permalink)  
Antiguo 22/04/2009, 07:10
 
Fecha de Ingreso: noviembre-2003
Mensajes: 35
Antigüedad: 21 años
Puntos: 0
problema al unir dos tablas

Buenas,
Necesito hacer una sentencia para unir dos tablas de SQLServer y mostrar el resultado en una web con asp.net
Necesito mostrar el nombre del artículo, mostrar una descripcion (que sólo existe en la tabla 1), recoger una referencia (que me servirá para hacer el enlace) y finalmente ordenar por fecha de entrada.
La sentencia quedaría:
(SELECT nombre AS nombre, descripcion AS descripcion, ref_art AS referencia, fecha AS fecha FROM articulos) UNION (SELECT nombre_art AS nombre, referencia AS referencia, fecha AS fecha FROM referencias) ORDER BY fecha;

Pero tengo 2 problemos:
1. El campo descripcion no existe en la tabla de referencias (tabla 2).
2. El campo ref_art (de la tabla de artículos) y referencia (de la tabla de referencias) son de diferente tipo, pero necesito ponerlos en el mismo campo para poder construir los enlaces.

Imagino que véis qué necesito hacer, y también lo poco que sé para poder conseguirlo.

No sé si a alguien se le puede ocurrir alguna solución, pero desde luego no pasa necesariamente por hacer un union, quizá esta no sea la manera, y lo mejor sería hacer una tabla temporal.

¿Cómo lo haríais vosotros?
Gracias,
Salud.
  #2 (permalink)  
Antiguo 22/04/2009, 09:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: problema al unir dos tablas

benito_camelas:
haciendo casting a un mismo tipo, sea de uno u otro, y poniendo dato concreto o null en el campo ausente. No nos dices de qué tipo son los campos de un diferente tipo, pero te pondré un ejemplo de un INT y un VARCHAR. Perdona pero te pongo la sintaxis de MySQL. Busca la sintaxis paralela en SQLserver:
con NULL
(SELECT CASTING(camponumerico as char) primercampo, descripcion, campo3 FROM TABLA1)
UNION ALL
(SELECT campoletra, NULL, campo3 FROM TABLA2)

con dato concreto
(SELECT CASTING(camponumerico as char) primercampo, descripcion, campo3 FROM TABLA1)
UNION ALL
(SELECT campoletra, "sin dato", campo3 FROM TABLA2)
  #3 (permalink)  
Antiguo 23/04/2009, 02:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 35
Antigüedad: 21 años
Puntos: 0
Respuesta: problema al unir dos tablas

Muchas gracias jurena, me has ayudado mucho, aunque me queda otra duda.
En SQLServer el select casting se hace tal cual lo dices, salvo que sería
SELECT CAST(campoNumerico as char) primercampo

Lo comento por si hay alguien en el mismo caso y le puede valer la información.

La duda que me queda es que necesito seleccionar los 10 primeros registros de esta consulta y ordenar los resultados por fecha, pero, aunque he visto esta solución por internet, no funciona la opción:
SELECT TOP 10 * (SELECT nombre AS nombre, descripcion AS descripcion, cast(ref_art AS int) AS referencia, fecha AS fecha FROM articulos) UNION (SELECT nombre_art AS nombre, 'notext' AS descripcion, cast(referencia AS int) AS referencia, fecha AS fecha FROM referencias) ORDER BY fecha;

¿A alguien se le ocurre cómo seleccionar los primeros registros?
Gracias.
  #4 (permalink)  
Antiguo 23/04/2009, 05:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: problema al unir dos tablas

En MySQL con algo así:

(
SELECT nombre, fecha
FROM `tabla1`
)
UNION ALL (

SELECT nombre, fecha
FROM tabla2
)
ORDER BY fecha DESC
LIMIT 10

Pero no creo que te funcione. Escribe en nuestro foro SQLserver y verás qué pronto te lo solucionan.
http://www.forosdelweb.com/f87/
  #5 (permalink)  
Antiguo 23/04/2009, 05:56
 
Fecha de Ingreso: noviembre-2003
Mensajes: 35
Antigüedad: 21 años
Puntos: 0
Respuesta: problema al unir dos tablas

Gracias jurena, probaré suerte.

Un saludo.
  #6 (permalink)  
Antiguo 23/04/2009, 21:50
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: problema al unir dos tablas

¿Y algo así?

Código Sentencia SQL:
Ver original
  1. SELECT a.nombre AS Nombre,
  2.              a.descripcion AS Descripcion,
  3.              a.referencia AS ReferenciaA,
  4.              a.fecha AS Fecha,
  5.              r.referencia AS ReferenciaR
  6. FROM articulos a, referencias r
  7. WHERE a.nombre = r.nombre_art,
  8. ORDER BY a.fecha
  9. LIMIT 10;

Lo que selecciona es:

Campo "nombre", "descripcion", "referencia", "fecha" de tabla artículo y,
campo "referencia" de tabla referencias para que puedas armar el link. Todo esto lo selecciona cuando "nombre" de la tabla artículo coincide con "nombre_art" de la tabla referencias.

¿Es esto lo que buscabas? Espero sirva, luego nos contás.

Saludos.
  #7 (permalink)  
Antiguo 19/06/2009, 05:26
 
Fecha de Ingreso: noviembre-2003
Mensajes: 35
Antigüedad: 21 años
Puntos: 0
Respuesta: problema al unir dos tablas

Bueno, me ha costado bastante pero al final he encontrado una solución.
Insisto que es una solución para utilizar en asp.net contra sqlserver, y es totalmente operativa.


La sentencia quedaría:
SELECT TOP 10 tabla_unida.* FROM ((SELECT nombre AS nombre, descripcion AS descripcion, cast(ref_art AS int) AS referencia, fecha AS fecha FROM articulos)) UNION ALL ((SELECT nombre_art AS nombre, 'notext' AS descripcion, cast(referencia AS int) AS referencia, fecha AS fecha FROM referencias)) AS tabla_unida ORDER BY tabla_unida.fecha DESC;

Me ha quedado una frase un poco larga pero funciona.
Espero que pueda ayudar a alguien que se vea en una situación similar a la mía.

¡Salud!
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:04.