consulta con varias tablas

inmadgm
30 de Marzo del 2005
Hola!!
Tengo un problema con la consulta de varias tablas y me está volviendo loca.Esta select me devuelve el registro que quiero que me salga pero infinita veces.
La select que tengo construida es esta:
select nombre_cadena,nombre_rotulo,fecha_hora,nombre_segmento,nombre_marca,pvp_articulo,num_facings,altura_lineal,nombre_tipo_promocion,formato_articulo,comentarios_insp from cadenas,centros,insp_lineal,segmentos,marcas,tipos_promociones,articulos,agentes,zonas_nielsen,zonas_gestion,visitas where insp_lineal.id_visita=3 and insp_lineal.id_articulo=1 and insp_lineal.id_tipo_promocion =tipos_promociones.id_tipo_promocion and insp_lineal.id_visita=3 and visitas.id_agente=1 and visitas.id_centro_visitado=3 and centros.id_cadena=1 and centros.id_zona_gestion=2 and centros.id_zona_nielsen=1 and insp_lineal.id_articulo=1 and articulos.id_segmento=1 and articulos.id_marca=1

Las tablas son estas:

create table insp_lineal (
id_insp_lineal number(8) primary key,
id_visita number(8)references visitas on delete cascade,
id_articulo number(8)references articulos on delete cascade,
pvp_articulo number(6),
num_facings number(2),
altura_lineal number(1),
comentarios_insp varchar2(100),
id_tipo_promocion number(8) references tipos_promociones on delete cascade,
comentarios_promocion varchar2(200),
fecha_hora date
);

create table tipos_promociones (
id_tipo_promocion number(8)primary key,
nombre_tipo_promocion varchar2(20),
comentarios_tipo_promocion varchar2(200)
);

create table visitas (
id_visita number(8)primary key,
fecha_visita date,
id_centro_visitado number(8),
visita_fuera_ruta number(1),
comentarios_cierre varchar2(200),
id_agente number(8) references agentes on delete cascade,
FOREIGN KEY (id_centro_visitado) REFERENCES centros(id_centro)on delete cascade
);

create table agentes (
id_agente number(8) primary key,
nombre_apellidos varchar2(200),
id_zona_gestion number(8),
telefono_agente varchar2(9),
fax_agente varchar2(9),
mail_agente varchar2(60),
codigo_usu_movilida varchar2(8),
pin_blackberry varchar2(8),
FOREIGN KEY (id_zona_gestion) REFERENCES zonas_gestion(id_zona_gestion)on delete cascade
);

create table centros (
id_centro number(8) primary key,
codigo_id_centro varchar2(5),
nombre_rotulo varchar2(25),
descrip_centro varchar2(150),
direccion_centro varchar2(100),
municipio_centro varchar2(50),
provincia_centro varchar2(25),
pais_centro varchar2(100),
jefe_seccion varchar2(50),
telefono_centro varchar2(9),
fax_centro varchar2(9),
mail_contacto varchar2(60),
num_surtido_defecto number(8),
id_cadena number(8) references cadenas on delete cascade,
clasificacion_centro varchar2(100),
comentarios_centro varchar2(150),
porcentaje_alcoholicas number(5),
georeferencia_x number(8),
georeferencia_y number(8),
id_zona_gestion number(8) references zonas_gestion on delete cascade,
objetivo_cabecera number(1),
num_cab_vinos number(3),
num_cab_destilados number(3),
id_zona_nielsen number(8) references zonas_nielsen on delete cascade
);

create table cadenas (
id_cadena number(8) primary key,
nombre_cadena varchar2(50),
descrip_cadena varchar2(150),
direccion_cadena varchar2(300),
municipio_cadena varchar2(50),
provincia_cadena varchar2(50),
pais_cadena varchar2(50),
nombre_contacto varchar2(100),
telefono_cadena varchar2(9),
fax_cadena varchar2(9),
mail_cadena varchar2(60),
comentarios_cadena varchar2(200),
id_gerente_cadena number(8),
FOREIGN KEY (id_gerente_cadena) REFERENCES gerentes(id_gerente)on delete cascade
);

create table zonas_nielsen (
id_zona_nielsen number(8)primary key,
nombre_zona_nielsen varchar2(50),
descrip_zona_nielsen varchar2(200)
);

create table zonas_gestion (
id_zona_gestion number(8)primary key using index,
nombre_zona_gestion varchar2(50),
descrip_zona_gestion varchar2(200),
id_gerente number(8),
foreign key (id_gerente) references gerentes
on delete cascade
);

create table articulos (
id_articulo number(8) primary key,
nombre_articulo varchar2(100),
descrip_articulo varchar2(150),
id_segmento number(8),
id_marca number(8),
formato_articulo varchar2(10),
pvp_minimo number(6),
pvp_maximo number(6),
pvp_recomendado number(6),
fecha_alta date,
fecha_baja date,
FOREIGN KEY (id_segmento) REFERENCES segmentos(id_segmento)on delete cascade,
FOREIGN KEY (id_marca) REFERENCES marcas(id_marca)on delete cascade
);

create table segmentos (
id_segmento number(8)primary key,
nombre_segmento varchar2(50),
comentarios_segmento varchar2(200)
);

create table marcas (
id_marca number(8) primary key,
nombre_marca varchar2(50),
comentarios_marca varchar2(200),
marca_summa number(1) check (marca_summa in(1,0))
);




aa
30 de Marzo del 2005
Has probado a poner DISTINC después del SELECT?

inmadgm
30 de Marzo del 2005
Querías decir DISTINCT, no?
Lo he probado pero continua un bucle infinito y me dan valores distintos y las condiciones no se me cumplen.
Gracias!!!

jc3000
30 de Marzo del 2005
¿ Donde haces la join con estas tablas :cadenas,segmentos ,marcas,agentes, visitas ?

Te está sacando N-Cientos productos cartesianos

inmadgm
30 de Marzo del 2005
Lo que quiero, es hacer una consulta con los campos que tengo puestos en la select y con la condiciones siguientes: (los datos que le asigno sería provisionales)
nombre_apellidos(de tabla agentes)=\'Inma Domínguez\' y nombre_cadena(de tabla cadenas)=\'Carrefour\' y nombre_rotulo(de la tabla centros)=\'Carrefour\' y municipio_centro(de Centros)=\'Sevilla\' y provincia_centro(de Centros)=\'Sevilla\' y nombre_articulo(de articulos)=\'Coca Cola\' y nombre_segmento(de segmentos)=\'Segmento 1\' y zona_gestion(de zonas_gestion)=\'Zona 2\' y zona_nielsen(de zona nielsen)=\'Nielsen 1\' y nombre_marca(de marcas)=\'Rec\' y marca_summa(de marcas)=1
probé antes esta select pero no sé si estara bien:
select nombre_cadena,nombre_rotulo,fecha_hora,nombre_segmento,nombre_marca,pvp_articulo,num_facings,altura_lineal,nombre_tipo_promocion,formato_articulo,comentarios_insp from cadenas,centros,insp_lineal,segmentos,marcas,tipos_promociones,articulos,agentes,zonas_nielsen,zonas_gestion,visitas where agentes.nombre_apellidos=\'Inma Domínguez\' and cadenas.nombre_cadena=\'Carrefour\' and centros.nombre_rotulo=\'Corte Inglés\' and centros.municipio_centro=\'Sevilla\' and centros.provincia_centro=\'Sevilla\' and articulos.nombre_articulo=\'Coca Cola\' and segmentos.nombre_segmento=\'Segmento 1\' and zonas_gestion.nombre_zona_gestion=\'Zona 2\' and zonas_nielsen.nombre_zona_nielsen=\'Nielsen 1\' and marcas.nombre_marca=\'Frudesa\' and marcas.marca_summa=1 and insp_lineal.id_visita=3 and insp_lineal.id_articulo=1 and insp_lineal.id_visita=3 and insp_lineal.id_articulo=1 and insp_lineal.id_tipo_promocion =tipos_promociones.id_tipo_promocion and insp_lineal.id_visita=visitas.id_visita and visitas.id_agente=agentes.id_agente and visitas.id_centro_visitado=centros.id_centro and centros.id_cadena=cadenas.id_cadena and centros.id_zona_gestion=zonas_gestion.id_zona_gestion and centros.id_zona_nielsen=zonas_nielsen.id_zona_nielsen and insp_lineal.id_articulo=articulos.id_articulo and articulos.id_segmento=segmentos.id_segmento and articulos.id_marca=marcas.id_marca

y me devolvia lo siguiente:
Carrefour Corte Inglés 2005-03-08 14:10:10.0 Segmento 1
Frudesa 3 7 9
Promoción 3 Botella null

Me sorprendí un poco por el resultado que me daba y por eso probé de otra forma. El caso es que acabo de ver los datos insertado en la tabla y estan bien.

Oye, muchas gracias por todo eres un encanto !!!