2012-06-25 5 views
6

Estoy intentando crear una consulta sql con menos.Minus operador en sql

tengo consulta1 que devuelve 28 filas con 2 columnas tengo consulta2 que devuelve 22 fila2 con los mismos 2 columnas en la consulta 2.

cuando cree una consulta consulta consulta1 menos 2 Debería haber sólo muestran la 28 -22 = 6 filas. Pero muestra todas las 28 filas devueltas por query1.

Por favor, asesorar.

+0

¿A qué base de datos está apuntando? Solo he usado 'menos' en el oráculo, personalmente. Sé que no existe estrictamente en este formulario en Sql Server, por ejemplo. – dwerner

+0

Publique su consulta y algunos datos de ejemplo de ambos lados del signo menos? –

+0

(Asumiendo el oráculo) Para que el 'menos 'funcione, toda la fila debe coincidir exactamente. – dwerner

Respuesta

1

algo como esto:

select field1, field2, . field_n 
from tables 
MINUS 
select field1, field2, . field_n 
from tables; 
+0

también ver http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=115930 – compcobalt

6

Si MENOS no funcionará para usted, la forma general que quiere es la consulta principal en el selecto exterior y una variación de la otra consulta en una cláusula no existe.

select <insert list of fields here> 
from mytable a 
join myothertable b 
on b.aId = a.aid 
where not exists (select * from tablec c where a.aid = c.aid) 
2

Los campos pueden no ser exactamente iguales. puede ser uno de los campos es char (10) y el otro es char (20) y ambos tienen la cadena "TEST" en ellos. Ellos podrían "mirar" lo mismo.

Si la base de datos en la que está trabajando admite "INTERSECT", intente esta consulta y vea cuántos coinciden perfectamente.

select field1, field2 from table1 
intersect 
select field1, field2 from table2 

Para obtener los resultados que espera, esta consulta debería darle 22 filas.

+1

El OP está buscando 6 filas, no 22 (suponiendo que 26 es un error tipográfico). – leppie

+1

Si 22 filas son comunes en la consulta 1 y en la consulta 2, la consulta MENOS proporcionará las 6 filas que no son comunes para ambas filas. Mi respuesta fue confirmar que los datos son los que OP espera que sean. –

+1

Una vez más quieres decir 22, ¿verdad? ; p – leppie

10

Pruebe a utilizar EXCEPTO en lugar de MENOS. Por ejemplo: Consideremos un caso en el que desee saber qué tareas hay en una tabla que no le han sido asignadas (entonces, básicamente, está tratando de encontrar qué tareas podrían estar disponibles para hacer).

SELECT TaskID, TaskType 
FROM Tasks 
EXCEPT 
SELECT TaskID, TaskType 
FROM Tasks 
WHERE Username = 'Vidya' 

Eso devolvería todas las tareas que no le han sido asignadas. Espero que ayude.

1

MINUS funciona según el mismo principio que en las operaciones de conjunto. Suponga que si ha configurado A y B, A = {1,2,3,4}; B = {3,5,6} luego, AB = {1,2,4}

Si A = {1,3,5} y B = {2,4,6} , AB = {1,3,5} Aquí el recuento (A) antes y después de la operación MENOS será el mismo, ya que no contiene ningún término superpuesto con el conjunto B.

En líneas similares, puede ser que el conjunto de resultados obtenido en la consulta 2 no coincida términos con el resultado de query1. Por lo tanto, todavía obtienes 28 en lugar de 6 filas.

Espero que esto ayude.

1

Devuelve los registros de diferencias en la consulta superior que no están contenidos en la segunda consulta.

En su caso por ejemplo A = {1,2,3,4,5 ... 28} AND B = {29,30} luego AB = {1,2,3 .... 28}

Cuestiones relacionadas