Mam stół drużynowy i stół graczy i chcę znaleźć wszystkie drużyny, które nie mają powiązanych z nimi graczy. Tabela graczy jest powiązana z kolumną team_id
. Używam Ruby on Rails, więc mam model Team i Player.Wyszukiwanie wszystkich rekordów bez powiązanych z nimi
Odpowiedz
może działać lepiej robi LEFT JOIN:
SELECT
teams.*
FROM teams
LEFT JOIN players ON (teams.id = players.team_id)
WHERE
players.team_id IS NULL
lub korzystając AREL (dzięki za komentarz JasonKing):
Team.includes(:players).where('players.team_id IS NULL')
Idealne, i używam także Railsów (coś, co powinienem wspomnieć, Zgaduję) więc to ładnie wiąże się ze składnią: join i: conditions. –
Nie ma potrzeby używania SQL do łączenia, to właśnie robi 'includes()'. To znaczy. 'Team.includes (: players) .where (" players.team_id IS NULL ")' – smathy
Ostatnia finezja: 'Team.includes (: players) .where (: players => {: team_id => zero})' – smathy
coś takiego:
select * from teams
where id not in (select distinct team_id from players)
Minusem tego podejścia: zajmie trochę czasu, jeśli masz dużo rekordów graczy –
Można by zrobić z NOT EXISTS
stanie tak:
SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
powinien generalnie móc zrobić sprzężenie zewnętrzne z rodzica na dziecko i sprawdzenie dla wartości pustej w polu w elemencie potomnym, które nie ma wartości NULL. Jest to na ogół szybsze niż "nie w" lub "nie istnieje". To może nie działać we wszystkich bazach danych.
- 1. Usuwanie wszystkich powiązanych rekordów z wielu tabel
- 2. Szyny - usuwanie niezapisanych powiązanych rekordów
- 3. Factory Girl: Tworzenie powiązanych rekordów
- 4. Zapisywanie powiązanych rekordów w laravel
- 5. Znajdowanie wszystkich powiązanych tabel z podaną tabelą
- 6. Usuwanie powiązanych rekordów w Yii2 - najlepsze praktyki
- 7. AcitveRecord nie akceptuje_nested_attributes_for nowych powiązanych rekordów z zagnieżdżonymi istniejącymi rekordami
- 8. Szyny znajdują rekord z zerową liczbą powiązanych rekordów.
- 9. Jak znaleźć rekordy bez powiązanych rekordów w has_many poprzez powiązanie z Active Record?
- 10. Połączyć dwie tabele bez związku między nimi
- 11. Szyny Aktywne wyszukiwanie rekordów - Nazwa zawiera słowo
- 12. C# Zdarzenia bez argumentów. Jak sobie z nimi radzić?
- 13. Wyszukiwanie rekordów z dwoma określonymi rekordami w innej tabeli
- 14. Wyszukiwanie bez zapętlenia
- 15. Jak wyświetlić formularz dla podzestawu powiązanych rekordów, z których niektóre jeszcze nie istnieją?
- 16. algolia php api nie zwraca wszystkich rekordów
- 17. Tworzenie kopii obiektu i wszystkich powiązanych modeli w szynach
- 18. Wyszukiwanie bez znaków alfabetem SQLite
- 19. Left Outer Join nie zwraca wszystkich rekordów z podstawowej tabeli
- 20. Dlaczego pojedyncze wyszukiwanie rekordów zwróci tablicę? (Początkujący Rails)
- 21. Wyszukiwanie indeksów wszystkich wystąpień elementu w wektorze
- 22. Wyszukiwanie tekstowe wszystkich plików .xib w Xcode?
- 23. Jak utworzyć dwie ramki bez spacji między nimi?
- 24. Czy istnieje sposób na odzyskanie wszystkich rekordów w kwerendzie (ElasticSearch)?
- 25. SHA256CryptoServiceProvider i związane z nimi możliwe do wykorzystania na WinXP?
- 26. Jak utworzyć listę wyników T-SQL z przecinkiem między nimi?
- 27. Szyny aktywne skojarzenie rekordów rekordów z "istniejącymi"
- 28. Ładowanie powiązanych danych w Sencha Touch bez zagnieżdżania
- 29. CodeIgniter: INSERT wiele rekordów bez cyklu
- 30. Liczba rekordów związanych z MySQL jedno zapytanie
Które dialekt SQL używasz? –
Idealnie powinno to działać z MySQL, Postgresem i Sqlite3. –