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

Consulta rarita

Estas en el tema de Consulta rarita en el foro de SQL Server en Foros del Web. Hola, a ver si alguien me puede echar una mano con esta consulta que no doy con la solución y me hace mucha falta... tabla ...
  #1 (permalink)  
Antiguo 21/11/2012, 11:06
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Consulta rarita

Hola,
a ver si alguien me puede echar una mano con esta consulta que no doy con la solución y me hace mucha falta...

tabla ASOCIACION
C1 - Peticion
C2 - Tarea_asociada

tabla ASIGNACIONES
C1 - Tarea_asociada

EJ:
Peticion1 --- Tarea1
Peticion1 --- Tarea2
Peticion1 --- Tarea3

ASOCIACION.Tarea_asociada=ASIGNACIONES.Tarea_asoci ada

Necesito sacar las peticiones (de ASOCIACION) que NINGUNA de sus tareas asociadas estén en la tabla de ASIGNACIONES.
Si alguna de las tareas de Peticion1 aparece en la tabla de ASIGNACIONES..... la peticion1 no debe aparecer en el resultado de la consulta.
Espero haberme expliado con claridad.
Gracias por adelantado
  #2 (permalink)  
Antiguo 21/11/2012, 11:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta rarita

segun lo que entendi lo puedes obtener con esto:

Código SQL:
Ver original
  1. CREATE TABLE #asociacion
  2. (
  3. c1 INT,
  4. c2 INT
  5. )
  6.  
  7. CREATE TABLE #asignaciones
  8. (
  9. c1 INT
  10. )
  11.  
  12. DELETE FROM #asociacion
  13. DELETE FROM #asignaciones
  14.  
  15. INSERT INTO #asociacion VALUES (1,1)
  16. INSERT INTO #asociacion VALUES (2,2)
  17. INSERT INTO #asociacion VALUES (3,3)
  18. INSERT INTO #asociacion VALUES (1,4)
  19.  
  20. INSERT INTO #asignaciones VALUES (1)
  21. INSERT INTO #asignaciones VALUES (2)
  22. INSERT INTO #asignaciones VALUES (3)
  23.  
  24. SELECT * FROM #asociacion AS t1
  25. LEFT JOIN #asignaciones AS t2 ON (t1.c2=t2.c1)
  26. WHERE t2.c1 IS NULL

En este ejemplo pone que la tarea 1 con la asociacion 4 es la que no tiene asignacion, pero no se si lo que necesitas es que en este caso no presente nada porque la tarea 1 ya tiene una asignacion....podrias poner un poco mas claro lo que necesitas(ejemplos de tus datos)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 22/11/2012, 01:32
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta rarita

Muchas Gracias Libras...
Si, en el ejemplo que has puesto no debe salir ninguna porque todos los valores de la primera tabla tiene al menos 1 valor en la segunda tabla.
EJ:
INSERT INTO #asociacion values (1,1)
INSERT INTO #asociacion values (2,2)
INSERT INTO #asociacion values (3,3)
INSERT INTO #asociacion values (1,4)
INSERT INTO #asociacion values (4,4)
INSERT INTO #asociacion values (4,5)

INSERT INTO #asignaciones values (1)
INSERT INTO #asignaciones values (2)
INSERT INTO #asignaciones values (3)

Aqui, debería salir el valor 4 de la primera tabla porque no tiene NINGUN valor asociado que exista en la tabla 2.
Solo necesito los valores de la tabla 1 que TOOOS sus valores asociados no existan en la tabla 2. Si existe al menos 1 ya no debe salir.
En el ejemplo que has puesto (1,1) y (1,4) como 1(segundo valor) si existe en la tabla 2 tampoco debe salir en el resultado de la consulta.
En el ejemplo que he ampliado yo debe salir el valor 4 (de la primera tabla) porque es el único que de sus segundos valores ninguno aparece en la segunda tabla (ni el 4 ni el 5 como segundo valor aparece en la segunda tabla.
Espero que ahora quede un poco mas claro....
  #4 (permalink)  
Antiguo 22/11/2012, 05:34
 
Fecha de Ingreso: noviembre-2011
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Consulta rarita

Muchas Gracias...
Ya lo he conseguido.
La dejo por si le sirve a alguien

SELECT distinct O.peticion_asociada
FROM odf_ca_pet_asociacion O
WHERE O.peticion_asociada not in (SELECT distinct OO.peticion_asociada FROM odf_ca_pet_asociacion OO
INNER JOIN prassignment P ON OO.tarea_asociada = P.prtaskid)

Así consigo las peticiones (odf_ca_pet_asociacion.peticion_asociada) que NINGUNA de sus tareas asociadas "odf_ca_pet_asociacion.tarea_asociada" se encuentran en la tabla de asignaciones (prassignment.prtaskid)
  #5 (permalink)  
Antiguo 22/11/2012, 12:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta rarita

Si fueran muchos registros, el NOT IN, no te dara el tiempo de respuesta adecuado, cambialo por el NOT EXISTS.
__________________
MCTS Isaias Islas

Etiquetas: 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:54.