简体   繁体   English

使用JOIN代替子查询

[英]Use JOIN instead of sub-query

I have this query 我有这个查询

SELECT `badges`.`id`,
       `badges`.`en_seo`

FROM   `badges`

WHERE  `status` IS  NULL
AND    `id`     NOT IN
       (SELECT `badges_id`

        FROM   `users_badges`

        WHERE  `users_id` = 1)

Can I rewrite this code using JOINS? 我可以使用JOINS重写此代码吗?

The exact equivalent to your query is: 与您的查询完全相同的是:

SELECT    `badges`.`id`,
          `badges`.`en_seo`
FROM      `badges`
LEFT JOIN `users_badges`
       ON `badges`.`id` = `users_badges`.`badges_id`
      AND `users_badges`.`users_id` = 1
WHERE     `badges`.`status` IS NULL
  AND     `users_badges`.`users_id` IS NULL

However, it's a common practice to use aliases like in Juan's answer. 但是,使用别名(如Juan的答案)的常见做法。

Always try to use alias for your table names 始终尝试使用别名作为表名

SELECT b.`id`,
       b.`en_seo`
FROM   `badges` b
LEFT JOIN `users_badges` ub
  ON b.`id`= ub.`badges_id`
 and ub.`users_id` = 1
WHERE b.`status` IS  NULL
 AND ub.`id` IS NULL

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM