Select entre parentesis

10/02/2008 - 20:37 por csharp1 | Informe spam
Que tal amigos,
tengo una situacion y es la siguiente,
hay una tabla llamada TABLAX que contiene 50 registros pero al hacer un
select entre parentesis no arroja resultados y no se porque. El select es
asi:
select * from tablax --> asi arroja 50 registros
(select * from tablax) > asi no arroja registros

y me esta afectando con uso ese select como una subconsulta asi:

select 1 from TABLAZETA
where CampoZeta not in (select CampoX
from TABLAX
where CONDICIONES)

y como veran, necesito colocar los parentisis y no se como hacer entonces =(

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
10/02/2008 - 21:59 | Informe spam
csharp1,

Yo no puedo reproducir el problema. Uso SQL Server 2005 sp2 y una senetncia
select entre parentesis si me devuelve resultado.

De todas maneras te aconsejo usar el operador NOT EXISTS y no el que estas
usando.

select 1
from TABLAZETA as a
where not exists (
select *
from TABLAX as b
where b.CampoX = a.CampoZeta
)
GO

Por que la recomendación?

Pues si existe un valor en cualquiera de los lados de la expresion que usa
NOT IN, entonces la el resultado seria NULL, puesto que la comparacion de
null con otros valores debe hacerse mediante el uso de IS [NOT] NULL.

Ejemplos:

SELECT 1
WHERE NULL NOT IN (1, 2)
GO

La expresion anterior seria algo asi como NOT (NULL = 1 OR NULL = 2). Las
dos expresiones separadas por el OR dan como resultado NULL y negar NULL es
NULL. Tambien puede analizarse como:

NULL != 1 AND NULL != 2

SELECT 1
WHERE 1 NOT IN (2, NULL)
GO

SELECT 1
WHERE 1 NOT IN (1, NULL)
GO

Esta sentencia anterior confunde aun mas, pero tambien tiene logica.

(1 != 1 AND 1 != NULL)


AMB

"csharp1" wrote

Que tal amigos,
tengo una situacion y es la siguiente,
hay una tabla llamada TABLAX que contiene 50 registros pero al hacer un
select entre parentesis no arroja resultados y no se porque. El select es
asi:
select * from tablax --> asi arroja 50 registros
(select * from tablax) > asi no arroja registros

y me esta afectando con uso ese select como una subconsulta asi:

select 1 from TABLAZETA
where CampoZeta not in (select CampoX
from TABLAX
where CONDICIONES)

y como veran, necesito colocar los parentisis y no se como hacer entonces =(



Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/02/2008 - 22:02 | Informe spam
Correción:

Pues si existe un valor en cualquiera de los lados de la expresion que usa
NOT IN



Pues si existe un valor NULL en cualquiera de los lados de la expresion que
usa
NOT IN ...


AMB


"Alejandro Mesa" wrote:

csharp1,

Yo no puedo reproducir el problema. Uso SQL Server 2005 sp2 y una senetncia
select entre parentesis si me devuelve resultado.

De todas maneras te aconsejo usar el operador NOT EXISTS y no el que estas
usando.

select 1
from TABLAZETA as a
where not exists (
select *
from TABLAX as b
where b.CampoX = a.CampoZeta
)
GO

Por que la recomendación?

Pues si existe un valor en cualquiera de los lados de la expresion que usa
NOT IN, entonces la el resultado seria NULL, puesto que la comparacion de
null con otros valores debe hacerse mediante el uso de IS [NOT] NULL.

Ejemplos:

SELECT 1
WHERE NULL NOT IN (1, 2)
GO

La expresion anterior seria algo asi como NOT (NULL = 1 OR NULL = 2). Las
dos expresiones separadas por el OR dan como resultado NULL y negar NULL es
NULL. Tambien puede analizarse como:

NULL != 1 AND NULL != 2

SELECT 1
WHERE 1 NOT IN (2, NULL)
GO

SELECT 1
WHERE 1 NOT IN (1, NULL)
GO

Esta sentencia anterior confunde aun mas, pero tambien tiene logica.

(1 != 1 AND 1 != NULL)


AMB

"csharp1" wrote

> Que tal amigos,
> tengo una situacion y es la siguiente,
> hay una tabla llamada TABLAX que contiene 50 registros pero al hacer un
> select entre parentesis no arroja resultados y no se porque. El select es
> asi:
> select * from tablax --> asi arroja 50 registros
> (select * from tablax) > asi no arroja registros
>
> y me esta afectando con uso ese select como una subconsulta asi:
>
> select 1 from TABLAZETA
> where CampoZeta not in (select CampoX
> from TABLAX
> where CONDICIONES)
>
> y como veran, necesito colocar los parentisis y no se como hacer entonces =(
>
>
>
Respuesta Responder a este mensaje
#3 Penta
11/02/2008 - 19:13 | Informe spam
Estimado Alejandro.
Serias tan amable de explayarte un poco mas sobre el NO uso del Not
IN ??

Estoy muy interesado ya que los desarrolladores donde trabajo lo usan
regularmente.

De antemano, Mil Gracias
PENTA.
Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/02/2008 - 19:42 | Informe spam
hola Penta,

Te recomiendo leas detenidamente los mensajes anteriores, incluyendo
ejemplos, y postees algun mensaje si aun tienes dudas.


AMB

"Penta" wrote:

Estimado Alejandro.
Serias tan amable de explayarte un poco mas sobre el NO uso del Not
IN ??

Estoy muy interesado ya que los desarrolladores donde trabajo lo usan
regularmente.

De antemano, Mil Gracias
PENTA.

Respuesta Responder a este mensaje
#5 Penta
11/02/2008 - 21:36 | Informe spam
Hola Alejandro.

Por ejemplo, esto es lo tipico que hacen los desarrolladores:

Si tengo TABLAX valores 1 y 2 y TABLAY valor 1

Select * from TABLAX
Where valores not in (Select valor from TABLAY)

Que podria pasar en dicho caso si en ambas tablas tengo valores
NULL ?? y que pasa si no los tengo ??

Salu2 y gracias.
PENTA.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida