Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/12/2011, 09:15
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: ¿Como puedo hacer esta consulta?

Hola de nuevo follow:

Hay que tener cuidado cuando en una condición WHERE mezcles condiciones AND y OR, ya que por jerarquía de operadores se ejecutan primero las condiciones AND que las OR...

En matemáticas 2+3*4 no es lo mismo que (2+3)*4... hay que utilizar paréntesis para asegurar que el orden de las comparaciones es el que queremos. en tu caso debería ser más o menos así:

Código:
SELECT * FROM usuarios U WHERE NOT exists (
SELECT * FROM amistades A 
where 
(A.id_usuario_a = U.id_usuario and A.id_usuario_b = '12') or 
(A.id_usuario_b = U.id_usuario and A.id_usuario_a = '12') 
);
Los paréntesis en rojo sirven para agrupara las condiciones para cada uno de los casos (el id del usuario en el campo A o en el campo B)... ahora bien, para excluir al usuario que hace la consulta del resultado final, puedes agregar una condición WHERE en la consulta externa, la consulta quedaría más o menos así:

Código:
SELECT * FROM usuarios U WHERE NOT exists (
SELECT * FROM amistades A 
where 
(A.id_usuario_a = U.id_usuario and A.id_usuario_b = '12')
or (A.id_usuario_a = '12' and A.id_usuario_b = U.id_usuario) 
)
AND U.id_usuario != '12';
Haz la prueba y nos comentas
Leo.