¿Cómo puedo implementar operaciones SQL INTERSECT y MINUS en MS Access?

Investigué y no encontré una forma de ejecutar operaciones INTERSECT y MINUS en MS Access. ¿Existe alguna manera?

INTERSECT es una unión interna. MINUS es una combinación externa, donde solo elige los loggings que no existen en la otra tabla.


INTERSECARSE

select distinct a.* from a inner join b on a.id = b.id 

MENOS

 select distinct a.* from a left outer join b on a.id = b.id where b.id is null 

Si edita su pregunta original y publica algunos datos de muestra, se puede dar un ejemplo.

EDITAR: Olvidé agregar lo distinto a las consultas.

INTERSECT NO ES UNA UNIÓN INTERNA. Ellos son diferentes. Un INNER JOIN le dará filas duplicadas en casos donde INTERSECT NO lo hará. Puede get resultados equivalentes por:

 SELECT DISTINCT a.* FROM a INNER JOIN b on a.PK = b.PK 

Tenga en count que PK debe ser la columna o columnas de la key principal. Si no hay PK en la table (¡MALO!), Debe escribirlo así:

 SELECT DISTINCT a.* FROM a INNER JOIN b ON a.Col1 = b.Col1 AND a.Col2 = b.Col2 AND a.Col3 = b.Col3 ... 

Con MINUS, puede hacer lo mismo, pero con un LEFT JOIN, y una condición WHERE que comtesting null en una de las columnas no nulo de la tabla b (preferiblemente la key principal).

 SELECT DISTINCT a.* FROM a LEFT JOIN b on a.PK = b.PK WHERE b.PK IS NULL 

Deberias hacer eso.

Han terminado a través de JOINs. La forma antigua 🙂

Para INTERSECT, puede usar una UNIÓN INTERNA. Muy claro. Solo necesita usar GROUP BY o DISTINCT si no tiene una relación pura de persona a persona. De lo contrario, como otros mencionaron, puedes get más resultados de los que esperarías.

Por MENOS, puede usar un ENLACE IZQUIERDO y usar el DONDE limitarlo, por lo que solo está recuperando filas de su tabla principal que no coinciden con la tabla LEFT JOINed.

Pan comido.

Desafortunadamente, MINUS no es compatible con MS Access. Una solución sería crear tres consultas, una con el set de datos completo, una que extraiga las filas que desea filtrar y una tercera que deja unir las dos tablas y solo extrae loggings que solo existir en su set de datos completo.

Lo mismo ocurre con INTERSECT, excepto que lo haría a través de una unión interna y solo devolvería los loggings que existen en ambos.