mysql - 将 SQL 语句中的 NOT IN 替换为 LEFT JOIN

标签 mysql sql database

我写了两个运行良好的查询,但它们真的很慢:

SELECT director
FROM movies
WHERE id NOT IN (SELECT movie_id FROM stars_in_movies WHERER star_id = %s);

SELECT first_name, last_name
FROM stars
WHERE id NOT IN (SELECT star_id
                 FROM stars_in_movies
                 WHERE movie_id IN(SELECT movie_id
                                   FROM stars_in_movies
                                   WHERE star_id = %s))

我尝试将 NOT IN 替换为 INNER JOINLEFT JOIN 但到目前为止我没有尝试任何工作。

以下是表的架构:

电影:

 - id (primary key),
 - title (title of the movie), 
 - year (year of release)
 - director (director of the movie)

星星:

 - id (primary key)
 - first_name
 - last_name

stars_in_movies:

 - movie_id, 
 - star_id (movie_id and star_id both are foreign keys here)

提前谢谢你。

最佳答案

试试这个:

SELECT m.director 
FROM movies m
LEFT JOIN stars_in_movies sm ON m.id = sm.movie_id
WHERE sm.movie_id IS NULL 
AND sm.star_id = %s

第二个查询

  SELECT first_name, last_name
  FROM stars s
  LEFT JOIN stars_in_movies sm
  ON sm.star_id = s.id
  WHERE sm.star_id IS NULL
  AND sm.star_id = %s
 
            

关于mysql - 将 SQL 语句中的 NOT IN 替换为 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434517/

相关文章:

mysql - 使用 Spring Boot 对 Mysql 进行 Hikari 配置

sql查询一次获取第二个表的值

mysql - 如何在 MariaDB 中创建更改组标识符

python - 输入错误 [] : findDistance() takes 0 positional arguments but 1 was given

Mysql命令CASE与子查询比较

mysql - 在 SQL 中使用 Group By 函数时遇到问题

php - MySQL 查询 MATCH 和 AGAINST 挂起

java - JPQL 查询不适用于不区分大小写的参数

Mysql:根据原因、历史状态和当前状态统计订单

php - 使用加入或别名获取具有相同报告电子邮件地址的用户的详细信息