negative Auswahl SQL-Abfrage

7

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.

Geschäftstabelle

[Busname] [Bus-ID]

Aktivitätstabelle

[Aktivitäts-ID] [Bus-ID]

Aktivitätserweiterungstabelle

[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?

    
Donovan 23.06.2010, 23:39
quelle

3 Antworten

19

Verwendung von NOT IN

%Vor%

Verwendung von NOT EXISTS

%Vor%

Verwendung von LEFT JOIN/IS NULL

%Vor%

Fazit

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.

    
OMG Ponies 24.06.2010, 00:37
quelle
4

SELECT * FROM businesses WHERE business.id NOT IN (SELECT DISTINCT business_id FROM activities)

    
Jamie Wong 23.06.2010 23:43
quelle
1

Ich würde eine Kombination aus linkem Join und einer Union verwenden, etwa wie folgt:

%Vor%     
shipmaster 23.06.2010 23:49
quelle