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

Consulta complicada

Estas en el tema de Consulta complicada en el foro de Bases de Datos General en Foros del Web. Buenas tardes Tengo un gran problema y es el siguiente Tengo tres tablas * una de categorias * otra de empresas y otra de categoria ...
  #1 (permalink)  
Antiguo 21/02/2011, 15:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 153
Antigüedad: 14 años
Puntos: 0
Exclamación Consulta complicada

Buenas tardes

Tengo un gran problema y es el siguiente

Tengo tres tablas * una de categorias * otra de empresas y otra de categoria vs empresas

lo que quiere decir que una empresa puede tener una o muchas categorias

como hago para listar todas las empresas y que en un solo campo de la empresa aparescan todas las categorias separadas por comas

Ej

id empresa -------- Nombre empresa -------- categorias empresa

1 ------------------- prueba ------------ grasas,aceites,abrasivos

Última edición por jonnyalex_1990; 21/02/2011 a las 15:57
  #2 (permalink)  
Antiguo 21/02/2011, 16:19
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Consulta complicada

Hola, ese tipo de relación se llama de muchos a muchos:

una empresa puede ser de varias categorias y a la vez una categoria puede contener varias empresas.
Entonces:

Se usaría un JOIN

SELECT * FROM empresa emp, categoria_vs_empresa empCat WHERE emp.id_empresa = empCat.id_empresa

De esta forma se cruzan las tablas, y se muetra todo lo que tiene la tabla empresa y la vez aparecen las categorias en las que está cada empresa.

Eso si toca trabajar la salida para que esté como quiere.

ciao
  #3 (permalink)  
Antiguo 21/02/2011, 16:20
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta complicada

Hola jonnyalex_1990:

Todo dependerá del manejador de base de datos que estés utilizando, por ejemplo MySQL implementa la función GROUP_CONCAT para hacer exactamente lo que necesitas. SQL Server te permite hacerlo mediante recursividad, Oracle implementa algo llamado LISTAGG (si no mal recuerdo)

http://www.forosdelweb.com/f87/como-...-campo-389466/

http://www.forosdelweb.com/f21/conca...olumna-324779/

http://www.oracle-base.com/articles/...Techniques.php

Si utilizas un Manejador diferente a estos, pues es cuestión de que le preguntes a SAN GOOGLE, seguro él tiene la respuesta.

Saludos
Leo.

Etiquetas: bases-de-datos
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 22:49.