2010-09-27 12 views
6

¿Cómo puedo simplificar varias consultas 'no entradas'? ¿Es eficiente de utilizar múltiples sub consultas: No en (...) y no en (..) y no en (..)utilizando NOT IN para varias tablas

estoy usando recuento (lo siento se olvidó de eso)

Select count (VisitorID) 

from Company 

where VisitorID not in (select VisitorID from UserLog where ActionID = 2) 

and VisitorID not in (select VisitorID from Supplies where productID = 4) 
+0

¿Puede dar una idea del tamaño de las tablas? ¿Qué pasa con la selectividad de los dos sub-selects? ¿Un tercio, 1 en 100? – pascal

Respuesta

6
Select count (VisitorID) 

from Company C 
where 
NOT EXISTS (select * from UserLog U where ActionID = 2 AND C.VisitorID = U.VisitorID) 
AND 
NOT EXISTS (select * from Supplies S where productID = 4 AND S.VisitorID = U.VisitorID) 

por qué no existe?

  • NO EN: Cualquier valor NULL en VisitorID UserLog o suministros significa que no hay partido

  • (LEFT JOIN): múltiples filas de salida si muchos UserLog o suministros por VisitorID. Las distintas necesidades que cambia el plan

Generalmente, NO EXISTE es la única opción correcta

2

Se puede usar un UNION para el grupo Identificación del

Select User 

from Company 

where VisitorID not in (
select VisitorID from UserLog where ActionID = 2 
UNION 
select VisitorID from Supplies where productID = 4 
) 
+1

esto funcionó para mí. Gracias. – tshenolo

Cuestiones relacionadas