Tengo una tabla de equipos y una mesa de jugadores y quiero encontrar todos los equipos que no tienen jugadores asociados con ellos. La tabla de jugadores está asociada a través de una columna team_id
. Estoy usando Ruby on Rails para esto, así que tengo un modelo Team y Player.Encontrar todos los registros sin asociados
Respuesta
Se puede realizar mejor haciendo una combinación izquierda:
SELECT
teams.*
FROM teams
LEFT JOIN players ON (teams.id = players.team_id)
WHERE
players.team_id IS NULL
o el uso de Arel (gracias a la observación del JasonKing):
Team.includes(:players).where('players.team_id IS NULL')
Perfecto, y estoy usando Rails también (algo que debería haber mencionado, Supongo) entonces esto se relaciona muy bien con la sintaxis de: join y: conditions. –
No es necesario usar SQL para la unión, eso es lo que 'includes()' hace. Es decir. 'Team.includes (: players) .where ('players.team_id IS NULL')' – smathy
Una última fineza: 'Team.includes (: players) .where (: players => {: team_id => nil})' – smathy
Algo como esto:
select * from teams
where id not in (select distinct team_id from players)
La desventaja de este enfoque: va a llevar un tiempo si tienes muchos registros de jugadores –
que lo hicieras con una condición NOT EXISTS
así:
SELECT *
FROM teams
WHERE NOT EXISTS (SELECT 1 FROM players WHERE players.team_id = teams.team_id)
En general, debería ser capaz de hacer una combinación externa de padres a hijos y de verificación para un valor nulo en un campo en el niño que no es nula. Esto es generalmente más rápido que un "no en" o "no existe". Esto puede no funcionar en todas las bases de datos.
- 1. Búsqueda de registros sin registros asociados en rieles 3
- 2. ActiveRecord encontrar todos los padres que tienen hijos asociados
- 3. Buscar todos los objetos sin objetos has_many asociados
- 4. Rails 3 encuentra todos los registros asociados has_many: a través de
- 5. Necesita SQL Query para encontrar registros principales sin registros secundarios
- 6. ActiveRecord: la eliminación de registros asociados
- 7. Rieles: HABTM - encuentre todos los registros sin asociación
- 8. ¿Cómo encontrar todos los disparadores asociados con una tabla con SQL Server?
- 9. Doctrine 2 - Obtener todos los registros
- 10. SQL con Limit1 devuelve todos los registros
- 11. ¿Cómo puedo encontrar todos los productos sin imágenes en Magento?
- 12. Borrar todos los registros de una tienda
- 13. Eliminar todos los registros en NSManagedObjectContext
- 14. NHibernate actualiza los registros sin cambios
- 15. ¿Dónde puedo encontrar los registros de IIS?
- 16. consulta sql para encontrar los registros duplicados
- 17. AcitveRecord no acepta attributes_nested_attributes_for nuevos registros asociados con registros existentes anidados
- 18. Migradoc, párrafo PDFsharp sin marcadores asociados
- 19. tienda Extjs encontrar todos
- 20. SQL: Inserte todos los registros de una tabla a otra tabla sin concretar las columnas
- 21. Los rieles destruyen todos los registros n menos nuevos
- 22. Cómo encontrar todos los registros en una carpeta forzosa de depósito durante dos marcas de tiempo
- 23. buscar todos los registros donde dos condiciones son verdaderas
- 24. ¿Cómo encontrar todos los procesos secundarios?
- 25. Recuperación de modelos sin obtener modelos asociados - CakePHP
- 26. Buscar todos los registros que tienen un campo no nulo?
- 27. Listando los nombres de los modelos asociados
- 28. Seleccionar todos los registros desde hace un año hasta ahora
- 29. ¿Cómo leo el valor de todos los registros con gdb?
- 30. Campo de downcase masivo para todos los registros en rieles
Qué dialecto de SQL está utilizando? –
Idealmente esto debería funcionar con MySQL, Postgres y Sqlite3 –