如何处理返回多行的子查询

时间:2013-03-13 11:17:16

标签: mysql sql mysql-error-1242

这是我写的用于获取Author-1的所有评论的查询。 作者1写了2篇帖子,每篇都有很多评论。我想要所有这些评论。

  SELECT * 
  FROM `package_reviews`
  WHERE `post_id` = (SELECT `post_id` 
                     FROM `wp_posts` 
                     WHERE `post_author`=1);

将错误消息显示为#1242 - 子查询返回的行数超过1行。

4 个答案:

答案 0 :(得分:1)

你应该在这里使用join。

像这样。

SELECT * FROM `package_reviews` r LEFT JOIN `wp_posts` p ON r.post_id= p.post_id WHERE p.post_author = 1

答案 1 :(得分:0)

你需要

SELECT * FROM `package_reviews`
  WHERE `post_id` IN 
   (SELECT `post_id` FROM `wp_posts` WHERE `post_author`=1);

如果您想要退回所有评论。

答案 2 :(得分:0)

您可以使用LIMIT

来限制子查询
 SELECT * 
 FROM `package_reviews`
 WHERE `post_id` IN (SELECT `post_id` 
                    FROM `wp_posts` 
                    WHERE `post_author`=1
                    );

答案 3 :(得分:0)

像这样更改你的代码: 选择 *   来自package_reviews   WHERE post_id = ANY(SELECT post_id                      来自wp_posts                      WHERE post_author = 1); 这个链接非常有用 http://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html