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

Busqueda NOT IN combinada

Estas en el tema de Busqueda NOT IN combinada en el foro de Bases de Datos General en Foros del Web. Hola, soy bastante novato en SQL, a ver si me podeis echar una mano. Tengo una tabla con (graficamente creo que me explico mejor) fotoid ...
  #1 (permalink)  
Antiguo 04/07/2010, 13:04
Avatar de Trebol-a  
Fecha de Ingreso: enero-2003
Ubicación: Cartagena, España
Mensajes: 44
Antigüedad: 21 años, 3 meses
Puntos: 0
Busqueda NOT IN combinada

Hola,
soy bastante novato en SQL, a ver si me podeis echar una mano.
Tengo una tabla con (graficamente creo que me explico mejor)

fotoid ------------------ tagid
12 ------------------------ 1
12 ------------------------ 2
12 ------------------------ 4
13 ------------------------- 1
13 ------------------------- 5
14 --------------------------2
15 -------------------------- 5

Quiero coger los "fotoid" que NO tengan tagid 2 ni 4
Hago:
SELECT fotoid FROM imagetag WHERE tagid NOT IN (2,4)

Pero esto no funciona, porque (imagino) la fotoid = 12 se cuela en el primer registro. Debo "agrupar" previamente las fotoid=12, ¿no? ¿como lo hago?

Muchas gracias
  #2 (permalink)  
Antiguo 04/07/2010, 13:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Busqueda NOT IN combinada

El problema es que en realidad se está cumpliendo bien la condición, porque está descartando los tagId 2 y 4; pero el fotoId 12 también tiene un tagId 1, que no estás considerando...
Lla consulta que debes hacer, en realidad, es más compleja:
Código SQL:
Ver original
  1. SELECT DISTINCT fotoid
  2. FROM imagetag
  3. WHERE fotoid NOT IN (SELECT fotoid FROM imagetag WHERE tagid IN (2,4));
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/07/2010, 19:18
Avatar de Trebol-a  
Fecha de Ingreso: enero-2003
Ubicación: Cartagena, España
Mensajes: 44
Antigüedad: 21 años, 3 meses
Puntos: 0
Respuesta: Busqueda NOT IN combinada

Muchas gracias, funciona perfecto.

Pensé que sería utilizando alguna orden del tipo "Group by" o similar, .... y cuya existencia desconozco... :)
  #4 (permalink)  
Antiguo 04/07/2010, 19:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Busqueda NOT IN combinada

Para el caso era innecesaria, porque hubiese dado el mismo resultado usando más recursos para realizar la consulta.
GROUP BY requiere primero recuperar la tabla de resultados con todas sus repeticiones, para recién allí hacer el agrupamiento.
DISTINCT va descartando las repeticiones a medida que va apareciendo.
Pero DISTINCT no hubiese sido funcional si hubieses pedido que se listaran dos campos, porque afecta el registro completo y no sólo un campo. En ese caso lo correcto hubiese sido GROUP BY.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/07/2010, 11:33
Avatar de Trebol-a  
Fecha de Ingreso: enero-2003
Ubicación: Cartagena, España
Mensajes: 44
Antigüedad: 21 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Busqueda NOT IN combinada

Me lo apunto para la proxima, muchas gracias.

Etiquetas: busquedas
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 14:17.