Ich wurde damit beauftragt, eine negative Auswahl aus unserer SQL-Datenbank zurückzugeben. Ich werde die Kriterien so gut wie möglich definieren. Bis jetzt habe ich keine Abfrage erstellt, die funktioniert hat.
[Busname] [Bus-ID]
[Aktivitäts-ID] [Bus-ID]
[Erw.-ID] [Aktivitäts-ID] [Bus-ID]
Ich brauche die Geschäftsnamen für alle Unternehmen, die keinen Datensatz mit dieser Geschäfts-ID in den zugehörigen Tabellen haben. Einfach gesagt, alle Unternehmen ohne Aktivitäten. Die Business ID kann in einer oder beiden verknüpften Tabellen vorhanden sein.
Dies hat mir einige Stunden lang Probleme bereitet, während ich versucht habe, Abfragen mit Joins zu erstellen, und nicht in oder in Statements. Kein Erfolg.
Irgendwelche Ideen?
NOT IN
NOT EXISTS
LEFT JOIN/IS NULL
Da es sich bei der Beziehung um einen Fremdschlüssel (business_id) handelt, kann davon ausgegangen werden, dass keine davon null ist. In diesem Fall sind NOT IN
und NOT EXISTS
die besten Mittel, um nach fehlenden Werten in SQL Server zu suchen. LEFT JOIN / IS NULL ist weniger effizient - Sie können mehr darüber in diesem Artikel lesen.
SELECT * FROM businesses WHERE business.id NOT IN (SELECT DISTINCT business_id FROM activities)
Ich würde eine Kombination aus linkem Join und einer Union verwenden, etwa wie folgt:
%Vor%Tags und Links sql sql-server sql-server-2005 tsql