tabla - union sql
¿Cómo puedo implementar operaciones SQL INTERSECT y MINUS en MS Access? (4)
Desafortunadamente, MINUS no es compatible con MS Access. Una solución sería crear tres consultas, una con el conjunto de datos completo, una que extraiga las filas que desea filtrar y una tercera que deja unir las dos tablas y solo extrae registros que solo existir en su conjunto 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 registros que existen en ambos.
Investigué y no encontré una forma de ejecutar operaciones INTERSECT y MINUS en MS Access. ¿Existe alguna manera?
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 obtener 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.
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 obtener resultados equivalentes por:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
on a.PK = b.PK
Tenga en cuenta que PK debe ser la columna o columnas de la clave principal. Si no hay PK en la mesa (¡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 comprueba null en una de las columnas no nulo de la tabla b (preferiblemente la clave principal).
SELECT DISTINCT a.*
FROM a
LEFT JOIN b
on a.PK = b.PK
WHERE b.PK IS NULL
Deberias hacer eso.
INTERSECT es una unión interna. MINUS es una combinación externa, donde elige solo los registros que no existen en la otra tabla.
INTERSECARSEselect 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.