Select con left joins

26/07/2006 - 09:48 por solusoft | Informe spam
Hola a todos.


Tegno esta consulta:

SELECT
a.CD_ARTICULO CD_ARTICULO, a.DS_RUTA_IMAGEN_G DS_RUTA_IMAGEN_G,
a.DS_RUTA_IMAGEN_P DS_RUTA_IMAGEN_P, ar.DESCART DESCART, at.IT_VISIBLE
IT_VISIBLE,

(SELECT DS_CATEGORIA FROM ALT3_CT_CATEGORIAS ct
WHERE ct.CD_CATEGORIA = car.CD_CATEGORIA) as DS_CATEGORIA

FROM
ALT3_ARTICULOS a, ARTICULO ar, ALT3_ARTICULOS_TIENDA at,
ALT3_CATEGORIAS_ARTICULOS car

WHERE
a.CD_ARTICULO *= ltrim(rtrim(ar.CODART))
and a.CD_ARTICULO *= at.CD_ARTICULO
and a.CD_ARTICULO *= car.CD_ARTICULO


He tenido que meter left joins por posibles valores nulos.

El caso es que la tabla A se relaciona con tabla CAR y la tabla CAR se
relaciona con la tabla CT. Existe un campo CT.DS_CATEGORIA que se necesita
incluir en el WHERE para realizar filtros por parte del usuario.

Intenté algo así, pero no funcionó:
WHERE
CT.DS_CATEGORIA like '%cajas%'

Cómo es posible hacerlo ?
De esta forma
select *
from ( TODA LA SELECT ANTERIOR) t
where t.DS_CATEGORIA like '%cajas%'

Se podría hacer, pero no existe otra forma ?? por características de la
aplicación no es posible generar esa SQL.


Saludos. Gracias compañeros.
 

Leer las respuestas

#1 Alejandro Mesa
26/07/2006 - 15:08 | Informe spam
Trata:

select
a.CD_ARTICULO CD_ARTICULO,
a.DS_RUTA_IMAGEN_G DS_RUTA_IMAGEN_G,
a.DS_RUTA_IMAGEN_P DS_RUTA_IMAGEN_P,
ar.DESCART DESCART,
[at].IT_VISIBLE IT_VISIBLE,
ct.DS_CATEGORIA as DS_CATEGORIA
FROM
ALT3_ARTICULOS a
left join
ARTICULO ar
on a.CD_ARTICULO = ltrim(rtrim(ar.CODART))
left join
ALT3_ARTICULOS_TIENDA [at]
on a.CD_ARTICULO = [at].CD_ARTICULO
left join
(
ALT3_CATEGORIAS_ARTICULOS car
inner join
ALT3_CT_CATEGORIAS ct
ct.CD_CATEGORIA = car.CD_CATEGORIA
)
a.CD_ARTICULO = car.CD_ARTICULO
WHERE
CT.DS_CATEGORIA like '%cajas%'
go

Recomendacion:

Evita el uso del estilo antiguo del "join" (*= y =*) y usa el estilo ANSI
(left join, right join). El estilo viejo no es soportado en la nueva version
2005 de SQL Server, al menos que pongas la compatibilidad de la db en 80 o
menor.


AMB

"solusoft" wrote:

Hola a todos.


Tegno esta consulta:

SELECT
a.CD_ARTICULO CD_ARTICULO, a.DS_RUTA_IMAGEN_G DS_RUTA_IMAGEN_G,
a.DS_RUTA_IMAGEN_P DS_RUTA_IMAGEN_P, ar.DESCART DESCART, at.IT_VISIBLE
IT_VISIBLE,

(SELECT DS_CATEGORIA FROM ALT3_CT_CATEGORIAS ct
WHERE ct.CD_CATEGORIA = car.CD_CATEGORIA) as DS_CATEGORIA

FROM
ALT3_ARTICULOS a, ARTICULO ar, ALT3_ARTICULOS_TIENDA at,
ALT3_CATEGORIAS_ARTICULOS car

WHERE
a.CD_ARTICULO *= ltrim(rtrim(ar.CODART))
and a.CD_ARTICULO *= at.CD_ARTICULO
and a.CD_ARTICULO *= car.CD_ARTICULO


He tenido que meter left joins por posibles valores nulos.

El caso es que la tabla A se relaciona con tabla CAR y la tabla CAR se
relaciona con la tabla CT. Existe un campo CT.DS_CATEGORIA que se necesita
incluir en el WHERE para realizar filtros por parte del usuario.

Intenté algo así, pero no funcionó:
WHERE
CT.DS_CATEGORIA like '%cajas%'

Cómo es posible hacerlo ?
De esta forma
select *
from ( TODA LA SELECT ANTERIOR) t
where t.DS_CATEGORIA like '%cajas%'

Se podría hacer, pero no existe otra forma ?? por características de la
aplicación no es posible generar esa SQL.


Saludos. Gracias compañeros.

Preguntas similares