2012-01-16 13 views
8

Realizo dos consultas y obtengo un resultado extraño. Me gustaría saber por qué sucede esto.
Ahora consultas:Resultado de la consulta Oracle contradictorio

SELECT * FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

El resultado está vacía.

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c 
    AND a.a = 123; 

El resultado es 1.

Realmente es la misma consulta con diferente valor devuelto.
La tabla A contiene una fila con el campo 'a' = 123.
La tabla B no contiene filas como a.a = b.a.

¿Cómo se puede devolver nada o 1 para la misma consulta?


Actualización:

Cuando hago esta manera

SELECT COUNT(*) FROM TABLE_A a, TABLE_B b, TABLE_C c 
    WHERE a.a = b.a (+) 
    AND b.c = c.c (+) 
    AND a.a = 123; 

Funciona bien.

+16

Modifique su consulta utilizando la sintaxis ANSI-92 ('LEFT JOIN', etc.), y luego pruébelo. ¡Tiene 20 años, creo que ha tenido tiempo de dormir! – MatBailie

+1

¿Qué pasa con 'TABLE_C'? ¿Que hay en ello? – gdoron

+2

@Dems. Maldición, desearía poder +1 más de una vez a veces ... –

Respuesta

1

Posiblemente tiene índices o restricciones de clave externa que no son consistentes con los datos de la tabla. Dado que estas dos consultas probablemente usan índices diferentes, devuelven datos inconsistentes.

¿Ha desactivado temporalmente las restricciones, o las ha configurado sin validar que han sido inicialmente válidas (ENABLE NOVALIDATE)?

Intenta reconstruir los índices y descartar y volver a crear las restricciones de clave externa para ver si eso soluciona el problema.

Cuestiones relacionadas