MySql-仅将限制应用于联接的行

时间:2019-02-10 20:40:22

标签: mysql

考虑以下查询:

SELECT u.id
     , u.name
     , p.id
  FROM users u
  LEFT 
  JOIN posts p
    ON p.id IN(
SELECT x.id 
  FROM posts x 
 WHERE x.user_id = u.id
ORDER 
    BY x.featured DESC 
LIMIT 10
);

我正在尝试将posts表添加到users表。但是我只希望每个用户最多检索10条帖子。

此方法会引发以下错误:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

有没有其他方法可以达到预期的结果?

1 个答案:

答案 0 :(得分:0)

您应该在子查询上使用内部联接,而不是左联接和IN子句

SELECT users.id, users.name, t.id
FROM users
INNER JOIN (
SELECT posts.id, posts.user_id
FROM posts 
WHERE posts.user_id = users.id
ORDER BY posts.featured DESC 
LIMIT 10 ) t on t.user_id  = users.id

通过这种方式,您不会在In子句中使用限制来查询子查询,这不会引发错误.. LIMIT & IN ....的错误,但不会引起JOIN( withou IN子句)