? He investigado y no he encontrado una forma de ejecutar operaciones INTERSECT y MINUS en MS Access. ¿Existe alguna manera?¿Cómo puedo implementar operaciones SQL INTERSECT y MINUS en MS Access
Respuesta
INTERSECT es una unión interna. MINUS es una combinación externa, donde elige solo los registros que no existen en la otra tabla.
se cruzan
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 publicar algunos datos de la muestra a continuación un ejemplo se puede dar.
EDITAR: Se olvidó de agregar en el distinto a las consultas.
Se realizan a través de JOIN. La forma antigua :)
Para INTERSECT, puede utilizar 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 una UNIÓN IZQUIERDA y usar el LUGAR DONDE limitarla, por lo que solo recibirá las filas de la tabla principal que no coinciden con la tabla JUNTO A LA IZQUIERDA.
Easy peasy.
Me votaron también, pero su respuesta es correcta. – LeppyR64
Desafortunadamente, MINUS no es compatible con MS Access; una solución alternativa 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 las dos tablas y solo extrae registros que solo existen en su conjunto de datos completo.
Lo mismo vale para INTERSECT, excepto que lo haría a través de una unión interna y solo devolvería los registros que existen en ambos.
Su implementación MINUS es demasiado complicada. -1 – LeppyR64
No es Access lo que no lo admite. Si escribe un paso directo al servidor SQL usando MINUS o INTERSECT, funcionará perfectamente. Es el motor de base de datos Jet cuyo dialecto SQL no incluye estos dos operadores. Todos los dialectos SQL están incompletos, así que este no es un gran problema con Jet. –
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 sobre 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 MENOS, puede hacer lo mismo, pero con un LEFT JOIN, y una condición en la comprobación de nula en una de las columnas que no admiten nulos 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
Eso debería hacerlo.
Saludos, se me olvidó agregar lo distinto en mi publicación. +1. – LeppyR64
- 1. Nhibernate y MS Access
- 2. ms-access: ¿cómo comentar el código sql?
- 3. Minus operador en sql
- 4. ¿Cómo puedo utilizar Hibernate con MS Access?
- 5. ¿Cómo implemento la paginación en SQL para MS Access?
- 6. Convertir TSQL a MS-Access SQL
- 7. SQL Server Express vs MS Access
- 8. Sincronizar datos de MS Access a MS SQL
- 9. ¿Tenemos transacciones en MS-Access?
- 10. ¿Cómo forzo a MS Access a conservar su formato SQL?
- 11. VBA + Hilos en MS Access
- 12. MS Access trigger?
- 13. C# Cómo conectar a MS Access 2007
- 14. MS Access sin VBA?
- 15. ¿Cómo DETENER MS Access para cambiar mi código SQL?
- 16. Implementar y representar operaciones polyadic
- 17. Revertir actualización SQL varias consultas en MS Access
- 18. MS Access prepara declaraciones
- 19. MS Access Propiedades
- 20. Almacenamiento de datos en MS Access y consulta en Excel
- 21. MS Access 2007 JOIN en múltiples campos
- 22. MS-Access, VBA y manejo de errores
- 23. Opuesto a INTERSECT en Oracle
- 24. Proporcionar ayuda en forma en MS Access
- 25. Seleccionar registros omitiendo filas en MS Access
- 26. MS Access SQL, cambio de tipo de datos
- 27. ¿Cómo puedo averiguar qué tablas de SQL Server están vinculadas a MS Access?
- 28. UNIÓN IZQUIERDA en criterios adicionales en MS Access
- 29. ¿Cómo conectar java a Ms Access 2010?
- 30. ¿Cómo eliminar en MS Access cuando se usa JOIN?
Hermosa respuesta :) –
¿Por qué? La lógica produce los mismos resultados que el estándar SQL INTERSECT y MINUS. – LeppyR64
Esto es exactamente lo que estaba diciendo y me votaron en contra. Ah bueno. +1 para usted, ya que se tomó el tiempo para dar ejemplos de sintaxis. –