Как использовать JOIN вместо вложенного запроса (НЕ ВХОДИТ)

#mysql #sql #select #join #query-performance

#mysql #sql #выберите #Присоединиться #запрос-производительность

Вопрос:

Я хочу перечислить всех людей, которые $_SESSION['userid'] следуют и не следуют

Этот запрос ниже предназначен для последующего приведения, он работает

В (медленно)

 SELECT user.* FROM user 
WHERE user.userid 
     IN (SELECT follow.followtoid FROM follow 
WHERE follow.followerid = $_SESSION['userid'])
 

СОЕДИНЕНИЕ (быстрое)

 SELECT p.* 
FROM user p
    JOIN follow f ON p.userid = f.followtoid
WHERE f.followerid = $_SESSION['userid']
 

Для тех, кто все еще не следует приведению, это работает, но кажется очень медленным
Пожалуйста, подскажите мне, как мне использовать JOIN вместо NOT IN

НЕ ВХОДИТ (медленно)

 SELECT user.* FROM user 
WHERE user.userid 
     NOT IN (SELECT follow.followtoid FROM follow 
WHERE follow.followerid = $_SESSION['userid'])
 

Ответ №1:

Вы могли бы использовать LEFT JOIN и исключить все строки, которые имеют совпадения;

 SELECT p.* 
FROM user p
LEFT JOIN follow f 
  ON p.userid = f.followtoid
 AND f.followerid = $_SESSION['userid']
WHERE f.followtoid IS NULL
 

Ответ №2:

Попробуйте это:

 SELECT u.* 
FROM user u
LEFT JOIN follow f ON u.userid = f.followtoid AND f.followerid = $_SESSION['userid']
WHERE f.followtoid IS NULL;
 

или

 SELECT u.* 
FROM user u
WHERE NOT EXISTS (SELECT 1 FROM follow f 
                  WHERE u.userid = f.followtoid AND f.followerid = $_SESSION['userid']
                 );