la sélection négative Requête SQL
J'ai été chargé avec le retour d'une sélection négative à partir de notre base de données sql. Je vais définir les critères du mieux que je peux. Jusqu'à présent je n'ai pas conçu une requête qui a travaillé.
Table Métier
[Bus] [Bus ID]
Table D'Activité
[ID d'activité] [Bus ID]
De L'Activité De Table D'Extension
[Ext ID] [ID d'Activité] [Bus ID]
J'ai besoin de l'Entreprise pour tous les noms des entreprises qui ne disposent pas d'un enregistrement avec les entreprises id # dans les tables associées. Tout simplement, toutes les entreprises sans activités. L'Entreprise ID peuvent être présents dans l'une ou des deux tables associées.
Cela m'a causé des ennuis pour quelques heures, alors que tentent de créer des requêtes avec des jointures et n'existe pas ou pas dans les déclarations. Pas de succès.
Des idées?
OriginalL'auteur Donovan | 2010-06-23
Vous devez vous connecter pour publier un commentaire.
À l'aide de
NOT IN
À l'aide de
NOT EXISTS
À l'aide de
LEFT JOIN/IS NULL
Conclusion
Parce que la relation est une clé étrangère (business_id), il est sûr de supposer aucun d'entre eux à être null. Dans ce cas,
NOT IN
etNOT EXISTS
sont le meilleur moyen de la recherche de valeurs manquantes dans SQL Server. LEFT JOIN/NULL est moins efficace - vous pouvez en lire plus à ce sujet dans cet article.OriginalL'auteur OMG Ponies
SELECT * FROM businesses WHERE business.id NOT IN (SELECT DISTINCT business_id FROM activities)
Je me demandais si il pourrait y avoir un gain de performance de le faire. Venez pour penser à elle, il pourrait être une perte de performances.. Hmm..
YMMV. Dans de nombreuses bases de données, le modificateur de requête DISTINCT fait son travail, trier le résultat de la requête, qui peut être coûteux. Je ferais plus confiance à MS SQL Server sait comment optimiser le PAS DANS la requête. Ou bien le transformer en un n'EXISTE PAS de requête.
OriginalL'auteur Jamie Wong
Je voudrais utiliser une combinaison d'un left join et un syndicat, quelque chose comme:
OriginalL'auteur shipmaster