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

cruse de tres tablas

Estas en el tema de cruse de tres tablas en el foro de SQL Server en Foros del Web. Hola, ojala me puedan ayudar. tengo tres tablas tblcomercios , tblsucursales y tblcupones. de estas 3 tablas debo hacer un cruse que como resultado me ...
  #1 (permalink)  
Antiguo 06/10/2009, 11:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 16
Antigüedad: 15 años, 1 mes
Puntos: 2
cruse de tres tablas

Hola, ojala me puedan ayudar.

tengo tres tablas tblcomercios , tblsucursales y tblcupones.

de estas 3 tablas debo hacer un cruse que como resultado me de la ciudad de las sucursales donde hayan cupones.

los campos de cada tablan son los siguientes

tblcomercios: idcomercio,nombre,n_sucursales
tblsucursales: idsucursal,nombre,ciudad
tblcupones: idcupon,idcomercio,sucursales,estado

nesesito cargar las ciudades que tengan cupones en estado=1 en un combo.

el problema radica en que en tblcupones los id de las sucursales se guardan en un solo campo separados por coma (,) sucursales (40,41,).
asi que deberia buscar en la tabla sucursal cada id que se encuentre en tblcupones.sucursales.

es posible hacerlo con un sql o tendria que usar un php para buscar cada id de sucursal.


espero me haya echo entender.
  #2 (permalink)  
Antiguo 06/10/2009, 12:08
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: cruse de tres tablas

Creo que tienes un problema de diseño en tu tabla tblcupones.
  #3 (permalink)  
Antiguo 06/10/2009, 12:13
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: cruse de tres tablas

asi es, tendras que hacer ciclos para obtener la informacion requerida...

--
como comentario:

Muchos a muchos = Tabla relacion


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 08/10/2009, 23:13
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 11 meses
Puntos: 7
Respuesta: cruse de tres tablas

Te he entendido y debes normalizar tus datos.
Por fortuna tu problema tiene una solución simple a partir de SQL Server 2005.
Como no tengo una muestra de tus datos me he inventado una con tu estructura para poder mostrar una solución con la cual podrias proceder.
Código:
--Contrucción de datos de prueba
DECLARE @tblsucursales TABLE(
    idsucursal    INT NOT NULL,
    nombre        VARCHAR(30) NOT NULL,
    ciudad        VARCHAR(30) NOT NULL
)

DECLARE @tblcupones TABLE(
    idcupon        INT NOT NULL,
    idcomercio    INT NOT NULL,
    sucursales    VARCHAR(200),
    estado        TINYINT NOT NULL
)

INSERT INTO @tblsucursales
SELECT    1            AS idsucursal,
        'MEX005'        AS nombre,
        'México'    AS ciudad UNION ALL
SELECT    2, 'MEX006', 'México'  UNION ALL
SELECT    3, 'MEX007', 'México'  UNION ALL
SELECT    4, 'MEX008', 'México'  UNION ALL
SELECT    5, 'GDL001', 'Guadalajara'  UNION ALL
SELECT    6, 'GDL002', 'Guadalajara'  UNION ALL
SELECT    7, 'GDL003', 'Guadalajara'  UNION ALL
SELECT    8, 'GDL004', 'Guadalajara'  UNION ALL
SELECT    9, 'GDL005', 'Guadalajara'  UNION ALL
SELECT    10, 'MTY001', 'Monterrey'  UNION ALL
SELECT    11, 'MTY001', 'Monterrey'  UNION ALL
SELECT    12, 'MTY001', 'Monterrey'  UNION ALL
SELECT    13, 'MTY001', 'Monterrey'  UNION ALL
SELECT    14, 'MTY001', 'Monterrey'  UNION ALL
SELECT    15, 'MTY001', 'Monterrey'  UNION ALL
SELECT    16, 'MTY001', 'Monterrey'

INSERT INTO @tblcupones
SELECT    1 AS idcupon,
        500 AS idcomercio,
        '2,3' AS sucursales,
        0 AS estado UNION ALL
SELECT    2, 5001, '1,4', 0 UNION ALL
SELECT    3, 5001, '5,6,9,', 1 UNION ALL
SELECT    4, 5001, '11,13,15', 1

--Consulta
SELECT        tc.idcupon,
            ids.idsucursal,
            ts.nombre,
            ts.ciudad
FROM        (
                SELECT        idcupon,
                            CAST('<x>' + REPLACE(sucursales, ',', '</x><x>') + '</x>' AS XML) AS x
                FROM        @tblcupones AS a
                WHERE        estado = 1
            ) AS tc
            CROSS APPLY    (
                    SELECT    sucursal.id.value('.', 'INT') AS idsucursal
                    FROM    tc.x.nodes('/x') AS sucursal(id)
                ) AS ids
            INNER JOIN    @tblsucursales AS ts
                        ON ids.idsucursal = ts.idsucursal
Saludos.
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:09.