Problema con JOINS

22/11/2006 - 16:32 por UsuarioNovato | Informe spam
Buenas, estoy revisando una aplicación que hace un select a una base de
datos de la siguiente manera

SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
FROM DETALLE A, CLIENTE B, ARTICULO C
WHERE (A.CODIGO LIKE '%0074%'
OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
OR A.CEDULA LIKE '%0074%'
OR isnull(B.NOMBRE,'') LIKE '%0074%'
OR isnull(C.DESCRIPCION,'') LIKE '%0074'
)
AND ( A.CEDULA *= B.CEDULA
AND A.CODIGO *= C.CODIGO)

La idea de este, es hacer un filtro por todos los campos donde me muestre
todas las coincidencias, en cualquiere campo, de un valor.

El problema es que deberia solo mostrarme 5 registros, pero me muestra
todos, no respeta el filtro

lo hice utilizando JOINS y funciona bien

SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
FROM DETALLE A
LEFT OUTER JOIN CLIENTE B
ON A.CEDULA = B.CEDULA
LEFT OUTER JOIN ARTICULO C
ON A.CODIGO = C.CODIGO
WHERE (A.CODIGO LIKE '%0074%'
OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
OR A.CEDULA LIKE '%0074%'
OR B.NOMBRE LIKE '%0074%'
OR C.DESCRIPCION LIKE '%0074'
)
El problema es que no puedo modificar la aplicaciòn para que lo haga de esta
manera... alguien sabe porque puede estar sucediendo esto?

Preguntas similare

Leer las respuestas

#1 Maxi
22/11/2006 - 17:14 | Informe spam
Hola, la primer sentencia no es recomendada usar en sql2k y ya en 2005 no es
mas compatible., una de las recomendaciones de no usarla es porque puede
retornar valores no deseados


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"UsuarioNovato" escribió en el mensaje
news:%
Buenas, estoy revisando una aplicación que hace un select a una base de
datos de la siguiente manera

SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
FROM DETALLE A, CLIENTE B, ARTICULO C
WHERE (A.CODIGO LIKE '%0074%'
OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
OR A.CEDULA LIKE '%0074%'
OR isnull(B.NOMBRE,'') LIKE '%0074%'
OR isnull(C.DESCRIPCION,'') LIKE '%0074'
)
AND ( A.CEDULA *= B.CEDULA
AND A.CODIGO *= C.CODIGO)

La idea de este, es hacer un filtro por todos los campos donde me muestre
todas las coincidencias, en cualquiere campo, de un valor.

El problema es que deberia solo mostrarme 5 registros, pero me muestra
todos, no respeta el filtro

lo hice utilizando JOINS y funciona bien

SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
FROM DETALLE A
LEFT OUTER JOIN CLIENTE B
ON A.CEDULA = B.CEDULA
LEFT OUTER JOIN ARTICULO C
ON A.CODIGO = C.CODIGO
WHERE (A.CODIGO LIKE '%0074%'
OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
OR A.CEDULA LIKE '%0074%'
OR B.NOMBRE LIKE '%0074%'
OR C.DESCRIPCION LIKE '%0074'
)
El problema es que no puedo modificar la aplicaciòn para que lo haga de
esta
manera... alguien sabe porque puede estar sucediendo esto?


Respuesta Responder a este mensaje
#2 UsuarioNovato
22/11/2006 - 17:54 | Informe spam
Si eso lo se... pero no puedo modificar el código que me genera esa
sentencia SQL, por lo que tendria que utilizar solo la primera sentencia...
:(


"Maxi" escribió en el mensaje
news:
Hola, la primer sentencia no es recomendada usar en sql2k y ya en 2005 no


es
mas compatible., una de las recomendaciones de no usarla es porque puede
retornar valores no deseados


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"UsuarioNovato" escribió en el mensaje
news:%
> Buenas, estoy revisando una aplicación que hace un select a una base de
> datos de la siguiente manera
>
> SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
> FROM DETALLE A, CLIENTE B, ARTICULO C
> WHERE (A.CODIGO LIKE '%0074%'
> OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
> OR A.CEDULA LIKE '%0074%'
> OR isnull(B.NOMBRE,'') LIKE '%0074%'
> OR isnull(C.DESCRIPCION,'') LIKE '%0074'
> )
> AND ( A.CEDULA *= B.CEDULA
> AND A.CODIGO *= C.CODIGO)
>
> La idea de este, es hacer un filtro por todos los campos donde me


muestre
> todas las coincidencias, en cualquiere campo, de un valor.
>
> El problema es que deberia solo mostrarme 5 registros, pero me muestra
> todos, no respeta el filtro
>
> lo hice utilizando JOINS y funciona bien
>
> SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
> FROM DETALLE A
> LEFT OUTER JOIN CLIENTE B
> ON A.CEDULA = B.CEDULA
> LEFT OUTER JOIN ARTICULO C
> ON A.CODIGO = C.CODIGO
> WHERE (A.CODIGO LIKE '%0074%'
> OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
> OR A.CEDULA LIKE '%0074%'
> OR B.NOMBRE LIKE '%0074%'
> OR C.DESCRIPCION LIKE '%0074'
> )
> El problema es que no puedo modificar la aplicaciòn para que lo haga de
> esta
> manera... alguien sabe porque puede estar sucediendo esto?
>
>


Respuesta Responder a este mensaje
#3 Maxi
22/11/2006 - 18:35 | Informe spam
Hola, bueno es que se esta usando mal SQLServer y si no lo cambias no podras
resolver el problema

In earlier versions of Microsoft® SQL ServerT 2000, left and right outer
join conditions were specified in the WHERE clause using the *= and =*
operators. In some cases, this syntax results in an ambiguous query that can
be interpreted in more than one way. SQL-92 compliant outer joins are
specified in the FROM clause and do not result in this ambiguity. Because
the SQL-92 syntax is more precise, detailed information about using the old
Transact-SQL outer join syntax in the WHERE clause is not included with this
release. The syntax may not be supported in a future version of SQL Server.
Any statements using the Transact-SQL outer joins should be changed to use
the SQL-92 syntax.

The SQL-92 standard does support the specification of inner joins in either
the FROM or WHERE clause. Inner joins specified in the WHERE clause do not
have the same problems with ambiguity as the Transact-SQL outer join syntax.



Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"UsuarioNovato" escribió en el mensaje
news:
Si eso lo se... pero no puedo modificar el código que me genera esa
sentencia SQL, por lo que tendria que utilizar solo la primera
sentencia...
:(


"Maxi" escribió en el mensaje
news:
Hola, la primer sentencia no es recomendada usar en sql2k y ya en 2005 no


es
mas compatible., una de las recomendaciones de no usarla es porque puede
retornar valores no deseados


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"UsuarioNovato" escribió en el mensaje
news:%
> Buenas, estoy revisando una aplicación que hace un select a una base de
> datos de la siguiente manera
>
> SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
> FROM DETALLE A, CLIENTE B, ARTICULO C
> WHERE (A.CODIGO LIKE '%0074%'
> OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
> OR A.CEDULA LIKE '%0074%'
> OR isnull(B.NOMBRE,'') LIKE '%0074%'
> OR isnull(C.DESCRIPCION,'') LIKE '%0074'
> )
> AND ( A.CEDULA *= B.CEDULA
> AND A.CODIGO *= C.CODIGO)
>
> La idea de este, es hacer un filtro por todos los campos donde me


muestre
> todas las coincidencias, en cualquiere campo, de un valor.
>
> El problema es que deberia solo mostrarme 5 registros, pero me muestra
> todos, no respeta el filtro
>
> lo hice utilizando JOINS y funciona bien
>
> SELECT A.CODIGO, A.FECHA, A.CEDULA, B.NOMBRE, C.DESCRIPCION
> FROM DETALLE A
> LEFT OUTER JOIN CLIENTE B
> ON A.CEDULA = B.CEDULA
> LEFT OUTER JOIN ARTICULO C
> ON A.CODIGO = C.CODIGO
> WHERE (A.CODIGO LIKE '%0074%'
> OR CONVERT(CHAR(10),A.FECHA, 113) LIKE '%0074%'
> OR A.CEDULA LIKE '%0074%'
> OR B.NOMBRE LIKE '%0074%'
> OR C.DESCRIPCION LIKE '%0074'
> )
> El problema es que no puedo modificar la aplicaciòn para que lo haga de
> esta
> manera... alguien sabe porque puede estar sucediendo esto?
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida