Ich habe eine Team-Tabelle und eine Spieler-Tabelle und ich möchte alle Teams finden, die keine Spieler mit ihnen verbunden haben. Die Spielertabelle ist über eine Spalte team_id
verbunden. Ich benutze Ruby on Rails dafür, also habe ich ein Team- und ein Player-Modell.Suche nach allen Datensätzen ohne zugehörige
Antwort
Es kann eine bessere Leistung nach links zu tun kommen:
SELECT
teams.*
FROM teams
LEFT JOIN players ON (teams.id = players.team_id)
WHERE
players.team_id IS NULL
Oder mit Arel (dank JasonKing Kommentar):
Team.includes(:players).where('players.team_id IS NULL')
Perfekt, und ich verwende auch Rails (etwas, das ich hätte erwähnen sollen, Ich schätze, das passt gut zur Syntax von: joins und: conditions. –
Keine Notwendigkeit, SQL für den Join zu verwenden, das ist es, was 'includes()' tut. Ie. 'Team.includes (: players) .where ('players.team_id IS NULL')' – smathy
Eine letzte Finesse: 'Team.includes (: players) .where (: players => {: team_id => nil})' – smathy
Etwas wie folgt aus:
select * from teams
where id not in (select distinct team_id from players)
Der Nachteil bei diesem Ansatz: Es wird eine Weile dauern, wenn Sie viele Spieler Datensätze haben –
Sie würden das tun, mit einem NOT EXISTS
Zustand etwa so:
SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
Sie sollten von Eltern auf das Kind und die Prüfung generell in der Lage sein, kommen Sie mit einem Außen zu tun für einen Nullwert in einem Feld in dem untergeordneten Element, das nicht nullfähig ist. Dies ist im Allgemeinen schneller als ein "nicht in" oder "nicht vorhanden". Dies funktioniert möglicherweise nicht in allen Datenbanken.
- 1. Suche nach allen Zahlen
- 2. Suche nach Zeichenfolge in mehrzeiligen Datensätzen
- 3. Suche nach allen Strings der Länge
- 4. Suche nach allen Datensätzen, die sich NICHT am inneren Join zweier Tabellen anschließen?
- 5. Suche nach allen Funktionen im aktuellen Arbeitsbereich
- 6. Suche nach Spalten mit allen fehlenden Werten
- 7. Suche nach allen gängigen, nicht überlappenden Teilstrings
- 8. Suche nach allen Pfaden in Grafik, Python
- 9. Suche nach allen Schritten im Eigenschaftspfad
- 10. Suche nach allen möglichen Kombinationen eines Textes
- 11. Suche nach allen möglichen Möglichkeiten, Karten auszutauschen
- 12. Suche nach allen Clients einer Gruppe
- 13. Suche in allen Datenbankfelder
- 14. Suche nach allen Bildern nach Klassennamen und Rückgabe src Attribut
- 15. Einfügen wenn nicht vorhanden - Suche nach allen Spalten
- 16. Suche nach übereinstimmenden Zeichenketten in 2 Datensätzen in R
- 17. Mysql Abfrage optimieren für die Suche nach Datensätzen!
- 18. Suche nach allen Aufrufen von Windows API aus einer Programmierperspektive
- 19. eine Art Unterschrift Vereinfachen ohne zugehörige Typen
- 20. CakePHP, zugehörige Tabellen bestellen
- 21. PowerShell - Suche nach allen Unterverzeichnissen und deren Verschiebung
- 22. Unix-Befehl für die Suche nach Textzeichenfolge in allen Dateien
- 23. Suche nach Zeichenfolge in einer Datei in allen Zweigen
- 24. Rails, ActiveRecord, Suche nach allen Ereignissen, die am Wochenende fallen
- 25. Suche nach int oder string in allen Feldern
- 26. Suche nach allen Domänen für eine Maschine in C#
- 27. Suche nach allen Kontrollkästchen, die NICHT markiert sind
- 28. Suche nach allen Klassen mit einem bestimmten Attribut
- 29. Suche nach allen öffentlichen Veranstaltungen in einem Bereich
- 30. Suche nach allen Elementen mit einer ID mit Selenium
Welche SQL-Dialekt spielst Du? –
Idealerweise sollte dies mit MySQL, Postgres und Sqlite3 funktionieren. –