Tomemos por ejemplo una aplicación que tiene usuarios, cada uno de los cuales puede estar en exactamente un grupo. Si queremos SELECCIONAR la lista de grupos que no tienen miembros, ¿cuál sería el SQL correcto? Sigo sintiendo que estoy a punto de captar la consulta, y luego desaparece de nuevo.Seleccione todos los elementos en una tabla que no aparezcan en una clave externa de otra tabla
Puntos de bonificación: dado el senario alternativo, donde hay muchas parejas, ¿qué es SQL para identificar grupos no utilizados?
(si desea que los nombres de campo de hormigón :) uno-a-muchos:
Table 'users': | user_id | group_id |
Table 'groups': | group_id |
Muchos-A-Muchos:
Table 'users': | user_id |
Table 'groups': | group_id |
Table 'user-group': | user_id | group_id |
Gracias por ambas respuestas, ambas funcionan. Tengo curiosidad si hay alguna diferencia funcional entre los dos métodos. – dimo414
@ dimo414 - al menos en Sql Server (2005), el plan de ejecución para mi versión es más corto y tiene un costo * marginalmente * más bajo. En realidad, sería más abajo de cuál consideras más legible, a menos que estés usando conjuntos de datos masivos. =) – Rob
Sin embargo, habiendo ejecutado ambas consultas en el mismo lote con 65.536 filas en users_groups, mi consulta aparece al 1% del costo del lote y la otra como el 99% del lote, ambas ejecutadas en menos de un segundo en total, aunque – Rob