Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Excluir IDs de consulta

Estas en el tema de Excluir IDs de consulta en el foro de Mysql en Foros del Web. Hola! Haber si me pueden echar una mano con esta consulta... Imagínense estas dos tablas: EQUIPOS id_equipo | nombre EQUIPOS_DIVISION id_equipo | id_division Quiero sacar ...
  #1 (permalink)  
Antiguo 10/10/2011, 03:45
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 11 meses
Puntos: 20
Pregunta Excluir IDs de consulta

Hola! Haber si me pueden echar una mano con esta consulta...

Imagínense estas dos tablas:

EQUIPOS
id_equipo | nombre


EQUIPOS_DIVISION
id_equipo | id_division

Quiero sacar los equipos que no esten asignados a una division...

Seria algo como

SELECT * FROM equipos, equipos_division WHERE equipos.id_equipo = equipos_division.id_equipo AND .......

Gracias
__________________
URGENTE! Alguien me puede ayudar con este tema??
http://www.forosdelweb.com/f57/tarea...rontab-924947/
  #2 (permalink)  
Antiguo 10/10/2011, 05:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Excluir IDs de consulta

SELECT * FROM equipos LEFT JOIN equipos_division ON equipos.id_equipo = equipos_division.id_equipo WHERE equipos_division.id_division IS NULL
  #3 (permalink)  
Antiguo 10/10/2011, 06:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Excluir IDs de consulta

Ups...!

Y aJurena la respondió...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/10/2011, 02:24
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 11 meses
Puntos: 20
Respuesta: Excluir IDs de consulta

Gracias por sus respuestas... pero no me sirve asi... o al menos no he sabido adaptarlo a mi consulta.

Si os parece os comento el problema completo;

Tengo por un lado EQUIPOS, por otro DIVISIONES y por otro EQUIPOS_DIVISIONES

TABLA EQUIPOS
1 - Corocotas
2 - Flash
3 - Louisiana
4 - Pequin
5 - Avenida
.....

TABLA DIVISIONES
1 - 1Division
2 - 2Division
3 - 2DivisionB
4 - 2DivisionC
5 - 3Division
.....

TABLA EQUIPOS_DIVISIONES
id - id_equipo - id_division
1 - 1 - 1 --------------> (Corocotas - 1º Division)
2 - 2 - 1 --------------> (Flash - 1º Division)
3 - 3 - 1
4 - 4 - 2

Como veis... en la tabla EQUIPOS_DIVISIONES se asigna el equipo a una division. Lo que quiero es OBTENER LOS EQUIPOS QUE NO ESTEN ASIGNADOS a ninguna division....

En el caso propuesto... la consulta me deberia devolver al equipo "Avenida" ya que es el unico que no esta asignado a ninguna division.

Mi consulta es esta:

Código PHP:
$sql_equipos mysql_query("SELECT equipos.id, equipos.nombre_equipo 
                                FROM equipos, divisiones, equipo_division 
                                WHERE divisiones.id_liga=$liga_actual
                                    AND equipo_division.id_equipo <> equipos.id
                                    AND equipo_division.id_division=divisiones.id
                                ORDER BY nombre_equipo"
$link); 
Haber si me pueden ayudar... estoy avanzando otras cosas de la web pero esto necesito sacarlo :(

Gracias
__________________
URGENTE! Alguien me puede ayudar con este tema??
http://www.forosdelweb.com/f57/tarea...rontab-924947/
  #5 (permalink)  
Antiguo 11/10/2011, 06:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Excluir IDs de consulta

Si lo que quieres es aquellos equipos que no pertenecen a una división, lo que corresponde es usar LEFT JOIN, como jurena te dice. Es lo mismo que yo proponía.
No puedes usar la coma porque la coma se parsea como un INNER JOIN y sólo te devolverá los que sí estén relacionados. Para los no relacionados corresponde usar lo que te decimos.
Ahora bien, a nivel de diseño, si un equipo sólo puede corresponder a una única división, la tabl aequipos_división carece de sentido, porque sólo debería existir si un equipo ha pertenecido históricamente a otras divisiones, porque en ese caso la relación es N:N y existe un discriminante (fecha u otra cosa) para cada caso.
En caso de ser así, el LEFT JIN requiere que determines mejor cuál es el período que estás analizando, ya que debe ser uno donde los equipos listados en la primera tabla no hayan pertenecido a ninguna división, o o hayan pertenecido jamás a las divisiones analizadas.
Otro detalle sería que en el contexto del resultado buscado, la tabla "divisiones" no es necesaria, porque el dato relevante ya está en "equipos_divisiones", y se puede obtener lo que se requiere con una subconsulta.
Según tu caso sería:
Código MySQL:
Ver original
  1.     E.id,
  2.     E.nombre_equipo
  3. FROM equipos E
  4.     LEFT JOIN (SELECT * FROM equipo_division id_liga=$liga_actual) ED  ON E.id = ED.id_equipo
  5.     ED.id_liga IS NULL
  6. ORDER BY nombre_equipo
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: excluir, ids, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:57.