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.