SQL 2000 Sentencia IN

31/10/2007 - 08:17 por Juan Carlos Mendoza | Informe spam
Buenas,

Quiero validar dos campos en una sentencia IN.
Normalmente cuando es un campo hacemos
if [campo] in [select campo...

como puedo hacer para validar algo como:

if [campo1], [campo2] in [ select campo1, campo2...

Gracias anticipadas.

Juan Carlos Mendoza

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
31/10/2007 - 09:56 | Informe spam
Hola Juan Carlos,

Puedes resolverlo con un «INNER JOIN» en lugar de un «IN»; por ejemplo:
__________________________________________________________

Si te gusta el formato de la sintaxis del «IN»...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1 INNER JOIN (
SELECT
Campo1,
Campo2
FROM
Tabla2
WHERE
CondicionesTabla2
) AS t2 ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
WHERE
CondicionesTabla1
__________________________________________________________

Si prefieres el formato estándar...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1 INNER JOIN Tabla2 t2
ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
WHERE
CondicionesTabla1 AND
CondicionesTabla2
__________________________________________________________

Y si te gusta el formato "clásico"...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1, Tabla2 t2
WHERE
t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2 AND
CondicionesTabla1 AND
CondicionesTabla2
__________________________________________________________

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
Respuesta Responder a este mensaje
#2 Juan Carlos Mendoza
31/10/2007 - 10:20 | Informe spam
Gracias por la acertada respuesta.

Juan Carlos Mendoza

On 31 oct, 03:56, Rubén Vigón wrote:
Hola Juan Carlos,

Puedes resolverlo con un «INNER JOIN» en lugar de un «IN»; por ejemplo:
__________________________________________________________

Si te gusta el formato de la sintaxis del «IN»...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1 INNER JOIN (
SELECT
Campo1,
Campo2
FROM
Tabla2
WHERE
CondicionesTabla2
) AS t2 ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
WHERE
CondicionesTabla1
__________________________________________________________

Si prefieres el formato estándar...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1 INNER JOIN Tabla2 t2
ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
WHERE
CondicionesTabla1 AND
CondicionesTabla2
__________________________________________________________

Y si te gusta el formato "clásico"...

SELECT
t1.Campo1,
t1.Campo2
FROM
Tabla1 t1, Tabla2 t2
WHERE
t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2 AND
CondicionesTabla1 AND
CondicionesTabla2
__________________________________________________________

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basichttp://vigon.mvps.org
Respuesta Responder a este mensaje
#3 Alejandro Mesa
31/10/2007 - 17:43 | Informe spam
Juan Carlos Mendoza,

Tambien pudieras usar el operador EXISTS en vez de el operador IN. Claro
esta, que dependiendo de lo que estes haciendo, puedes obtener mejor
rendimiento si usas JOIN o el operador EXISTS.

select *
from dbo.t1 as a
where exists (
select *
from dbo.t2 as b
where b.c1 = a.c1 and b.c2 = a.c2
)

Si la relacion entre las tablas es de uno a muchos (una fila en t1 puede
tener 0, 1 o muchos en t2), entonces si solo deseas seleccionar desde t1, las
filas donde existen valores de c1 y c2 en t2, si queires usar INNER JOIN, el
resultado te puede traer duplicados (en realidad no son duplicados, pero como
la relacion es de uno a muchos, entonces traera en el resultado tantas veces
coincida la relacion) y deberas usar DISTINCT, por lo que sera mas costoso.

AMB

"Juan Carlos Mendoza" wrote:

Gracias por la acertada respuesta.

Juan Carlos Mendoza

On 31 oct, 03:56, Rubin Vigsn wrote:
> Hola Juan Carlos,
>
> Puedes resolverlo con un +INNER JOIN; en lugar de un +IN;; por ejemplo:
> __________________________________________________________
>
> Si te gusta el formato de la sintaxis del +IN;...
>
> SELECT
> t1.Campo1,
> t1.Campo2
> FROM
> Tabla1 t1 INNER JOIN (
> SELECT
> Campo1,
> Campo2
> FROM
> Tabla2
> WHERE
> CondicionesTabla2
> ) AS t2 ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
> WHERE
> CondicionesTabla1
> __________________________________________________________
>
> Si prefieres el formato estandar...
>
> SELECT
> t1.Campo1,
> t1.Campo2
> FROM
> Tabla1 t1 INNER JOIN Tabla2 t2
> ON t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2
> WHERE
> CondicionesTabla1 AND
> CondicionesTabla2
> __________________________________________________________
>
> Y si te gusta el formato "clasico"...
>
> SELECT
> t1.Campo1,
> t1.Campo2
> FROM
> Tabla1 t1, Tabla2 t2
> WHERE
> t1.Campo1 = t2.Campo1 AND t1.Campo2 = t2.Campo2 AND
> CondicionesTabla1 AND
> CondicionesTabla2
> __________________________________________________________
>
> Un saludo!
>
> Rubin Vigsn
> Microsoft MVP Visual Basichttp://vigon.mvps.org



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