J'ai recherché et n'ai pas trouvé un moyen d'exécuter des opérations INTERSECT et MOINS dans MS Access. Existe-t-il un moyen?Comment puis-je implémenter des opérations SQL INTERSECT et MINUS dans MS Access
Répondre
INTERSECT est une jointure interne. MINUS est une jointure externe, dans laquelle vous ne sélectionnez que les enregistrements qui n'existent pas dans l'autre table.
INTERSECT
select distinct
a.*
from
a
inner join b on a.id = b.id
MOINS
select distinct
a.*
from
a
left outer join b on a.id = b.id
where
b.id is null
Si vous modifiez votre question initiale et postez quelques exemples de données alors un exemple peut être donné.
EDIT: oublié d'ajouter dans le distinct aux questions.
Ils sont exécutés via JOINs. La manière à l'ancienne :)
Pour INTERSECT, vous pouvez utiliser un INNER JOIN. Assez simple. Juste besoin d'utiliser un GROUP BY ou DISTINCT si vous n'avez pas une pure relation one-to-one continue. Sinon, comme d'autres l'ont mentionné, vous pouvez obtenir plus de résultats que prévu. Pour MINUS, vous pouvez utiliser un LEFT JOIN et utiliser le WHERE pour le limiter afin de ne récupérer que les lignes de votre table principale qui ne correspondent pas à la table LEFT JOINed.
Peasy facile.
J'ai été rejeté aussi, mais votre réponse est correcte. – LeppyR64
Malheureusement, MINUS n'est pas pris en charge dans MS Access - une solution consiste à créer trois requêtes, une avec l'ensemble de données complet, une qui extrait les lignes que vous souhaitez filtrer et une troisième qui joint les deux tables. tire des enregistrements qui n'existent que dans votre ensemble de données complet. Il en va de même pour INTERSECT, sauf que vous le feriez via une jointure interne et que vous ne retourneriez que les enregistrements qui existent dans les deux.
Votre implémentation MINUS est trop compliquée. -1 – LeppyR64
Ce n'est pas Access qui ne le supporte pas. Si vous écrivez un passthrough au serveur SQL en utilisant MINUS ou INTERSECT cela fonctionnera très bien. C'est le moteur de base de données Jet dont le dialecte SQL ne fait pas ces deux opérateurs. Tous les dialectes SQL sont incomplets donc ce n'est pas un gros problème avec Jet. –
INTERSECT n'est pas un INNER JOIN. Ils sont différents. Une INNER JOIN vous donnera des lignes dupliquées dans les cas où INTERSECT ne le fera pas. Vous pouvez obtenir des résultats équivalents en:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
on a.PK = b.PK
Notez que PK doit être la colonne ou les colonnes de clé primaire. S'il n'y a pas PK sur la table (! BAD), vous devez l'écrire comme ceci:
SELECT DISTINCT a.*
FROM a
INNER JOIN b
ON a.Col1 = b.Col1
AND a.Col2 = b.Col2
AND a.Col3 = b.Col3 ...
Avec MINUS, vous pouvez faire la même chose, mais avec un LEFT JOIN, et une condition WHERE vérification de null sur l'une des colonnes non nullables de la table b (de préférence la clé primaire).
SELECT DISTINCT a.*
FROM a
LEFT JOIN b
on a.PK = b.PK
WHERE b.PK IS NULL
Cela devrait le faire.
Cheers, j'ai oublié d'ajouter le distinct dans mon message. +1 – LeppyR64
- 1. Utilisation des fonctions mathématiques dans Sql avec MS Access
- 2. Comment implémenter correctement un trigger dans MS SQL 2005/2008?
- 3. ComboBox modifiable et modifiable (?) Dans MS Access
- 4. Comment gérer les transactions MS Access dans une application multithread et comment synchroniser les tables MS Access et Oracle?
- 5. fusionner des cellules dans ms-access
- 6. commande SQL des opérations
- 7. Comment convertir des champs en lignes via SQL dans MS Access 2007 ou MS SQL Server 2005
- 8. Comment migrer de MS Access vers le serveur SQL 2005?
- 9. Compilateur MS-Access .mdb?
- 10. Comment afficher le code des fonctions intégrées dans MS Access?
- 11. Union et Intersect à Django
- 12. sql pour comparer deux chaînes dans MS Access
- 13. MS Access interop - Data Import
- 14. Insérer une commande SQL avec Datetime dans MS-Access
- 15. Colonnes pivot MS-Access
- 16. Lier MS Excel aux requêtes MS Access
- 17. Trace Activité MS Access DB
- 18. MS Access Propriétés
- 19. INSERT d'ASP.NET à MS Access
- 20. Comment distiguish entre MS Access Fullversion avec Access Run-Time
- 21. Portage application MS Access
- 22. ms-access 2007 .exe
- 23. MS Access Limit
- 24. MS Access Atomic Transactions
- 25. Comment implémenter une transaction dans vb.net?
- 26. MS Access Project Dans TFS Build
- 27. Dictionnaires et tables de hachage dans MS-Access 2007
- 28. MS Access 2003 - Importation d'un fichier texte dans la base de données MS Access Tableau
- 29. Recherche de lignes avec des données en double dans MS Access
- 30. Comment restreindre MS Access DB pour ouvrir
Belle réponse :) –
Pourquoi ça? La logique produit les mêmes résultats que le standard SQL INTERSECT et MINUS. – LeppyR64
C'est exactement ce que je disais et j'ai été rejeté. Et bien. +1 pour vous, puisque vous avez pris le temps de donner des exemples de syntaxe, cependant. –