Necesito filtrar filas con valores de negación. Es decir. Quiero eliminar todas las filas donde coincide una columna y hay dos filas con valores de negación. es decir, de

ID, Val, Details
0,   4,  "Details 0 1..."
1,   5,  "Details 1 1..."
1,   7,  "Details 1 2..."
1,  -5,  "Details 1 3..."
2,   9,  "Details 2 1..."

Querría

ID, Val, Details
0,   4,  "Details 0 1..."
2,   9,  "Details 2 1..."

Porque las filas 1,5 ... y 1, -5, ... niegan lo que marca esa ID como inválida. Estoy luchando por encontrar una forma limpia de hacer esto.

1
Hector 13 dic. 2016 a las 14:12
1
¿Por qué 1,7 no se incluye en el resultado esperado?
 – 
TheGameiswar
13 dic. 2016 a las 14:14
Porque si hay un valor de negación para el ID, todos los valores con ese ID deben ignorarse.
 – 
Hector
13 dic. 2016 a las 14:18

1 respuesta

La mejor respuesta

Utilice NOT EXISTS para verificar que el ID no tenga "valores de negación":

select *
from tablename t
where not exists (select 1 from tablename t1
                  join tablename t2
                      on t1.ID = t2.ID and t1.Val = -t2.Val
                  where t1.ID = t.ID)
5
jarlh 13 dic. 2016 a las 14:15