У меня есть три таблицы со схемой t1[идентификатор,имя],t2[пользователь,событие],t3[идентификатор,организатор]

#mysql #database

Вопрос:

UID,пользователь,организатор-это одни и те же данные.

Теперь я хочу извлечь данные из t1 таким образом, чтобы t1.uid=t2.user , но t2.user!=t3.organizer . Таким образом, мы можем сказать, что извлекаем данные из t1, если они присутствуют в t2, но если данные в t2 находятся в t3, то мы должны пропустить.

Я работал с несколькими запросами, не получая правильного ответа.

 select distinct uid, name 
from user,review 
where (user.uid=review.user) join event 
on review.user<>event.organizer;

select distinct uid,name 
from user,review,event 
where user.uid<>event.organizer and user.uid=review.user;
 

Ответ №1:

Вы можете использовать EXISTS , чтобы проверить, есть ли совпадающая строка для каждого пользователя, review и NOT EXISTS убедиться, что в ней нет совпадающей строки event :

 SELECT u.uid, u.name 
FROM user u
WHERE EXISTS (SELECT 1 FROM review r WHERE r.user = u.uid) 
  AND NOT EXISTS (SELECT 1 FROM event e WHERE e.organizer = u.uid);