Problema gordo con Consulta: Ayuda

Hola, mira te comento mi problema. Tengo 2 tablas, la primera tiene los siguientes campos(columnas) MARCA-CODE1-CODE2 es decir una marca se puede definir de 2 formas Code1 o Code2. Por otro lado tengo otra tabla, con los campos. PRENDA-CODE1-CODE2 pero con la particularidad de que una prenda SOLO se identifica con Code1 o con Code2, es decir si se identifica con COde1 code2 esta en blanco, y viceversa.
Estoy intentando realizar una consulta de forma que pueda obtener una tabla con los campos PRENDA-MARCA-CODE (aquí el campo CODE hace referencia al que tenga, Code1 o Code2) pero no se como hacerlo. Llevo intentándolo desde ayer y me urge puesto que es una BD comercial pero no se hacerlo. Te pido ayuda. Por cierto las bases de datos no las puedo modificar. Ayúdame por favor. GRACIAS

3 respuestas

Respuesta
1
La forma más práctica de resolver tu problema me parece que es con la creación de tres consultas, la primera que recoja los datos de las dos tablas pero relacionadas por el campo code1, en ese caso a la columna code1 la deberás denominar simplemente code, la segunda consulta donde recojas los datos de las mismas dos tablas pero esta vez relacionadas por la columna code2, finalmente una consulta de unión entre las dos consultas que deberá tener la siguiente sintaxis:
SELECT * FROM CONSULTA1 UNION SELECT * FROM CONSULTA2
Ojo que para que funcione ambas consultas (1 y 2) deberán tener el mismo número de columnas a visualizar, esto funciona bajo el supuesto de que tanto la columna code1 en ambas tablas como la columna code2 sirven de relacionadores entre las tablas.
Respuesta
1
Tienes que hacer una consulta de UNION.
Para ello crea una nueva consulta. Metete en SQL y copia
Algo como
SELECT prendas.prenda, marcas.Marca, marcas.[code-1]
FROM prendas INNER JOIN marcas ON prendas.[code-1] = marcas.[code-1]
where prendas.[code-1]>0;
UNION SELECT prendas.prenda, marcas.Marca, marcas.[code-2]
FROM prendas INNER JOIN marcas ON prendas.[code-2] = marcas.[code-2]
WHERE (((prendas.[code-2]) >0));
Notas:
- Prendas y marcas son los nombres de las tabla.
- He supuesto que code-1 y code-2 son numéricos, y no valor es un cero.
- He supuesto que la marca de una prenda con code-1 hay que buscarla en marcas, code-1.
Y la marca de una prenda de code-2 en code-2.. Si no fuera así la soca es más complicada... habría que añadir otras dos consultas.
- Las uniones ne las consultas son LENTAS
Respuesta
1
Para sacar prenda-code(siendo este el de la prenda), tan solo tienes que hacer dos selects, una cogiendo prenda y code1 donde code2 sea null y la otra al contrario, donde code1 sea null, y unirlas así:
(Select prenda, c1 as codigo from tablap where c2 is null)
Union
(Select prenda, c2 as codigo from tablap where c1 is null)
Al darle el mismo alias(código) a c1 y c2 en la tabla resultante del union te sale en la misma columna.
Ahora bien, podemos hacer esto mismo con una select donde saquemos marca-prenda-código para las prendas cuyo codigo2 este vacío y el codigo1 o el 2 de la marca sea igual al código de la prenda, uniéndola con la contraria(buscando las prendas de codigo1 vacío)
(select m.marca,p.prenda,p.codigo from tablam as m,(select prenda,c1 as codigo from tablap where c2 is null) as p where m.c1=p.codigo or m.c2=p.codigo)
union
(select m.marca,p.prenda,p.codigo from tablam as m,(select prenda,c2 as codigo from tablap where c1 is null) as p where m.c1=p.codigo or m.c2=p.codigo)
Incluí las selects anteriores(prendas) en el from, como si fueran tablas, dándoles un alias('p')
Esto te dará algo así:
Marca - prenda - código
Xxxxx yyyyyy 1
X0000 yyyyyy 2
Xxxxx cccccc 1
¿Es más o menos lo que buscabas?
Espero que al menos te sirva de ayuda, y si no es así comentame algo más que igual no lo entendí bien,
un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas