2013-03-13 4 views
0

이것은 작성자 1의 모든 검토를 가져 오기 위해 작성한 쿼리입니다. Author-1은 많은 리뷰가 각각 2 개의 게시물을 작성했습니다. 나는 그 모든 리뷰를 원한다.둘 이상의 행을 반환하는 하위 쿼리를 처리하는 방법

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

# 1242로 오류 메시지 가져 오기 - 하위 쿼리가 두 개 이상의 행을 반환합니다.

답변

1

여기에서 join을 사용해야합니다.

이와 비슷한 것. 모든 리뷰를 반환하려는 경우

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

당신은

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

이 필요합니다. SELECT * package_reviews FROM WHERE post_id = ANY (wp_posts 로부터 post_id 을 선택 WHERE post_author = 1);

+0

이렇게하면 모든 post_id의 리뷰가 반환됩니다. 그것으로 필터링하지 post_author = 1 – Rao

+0

post_author 숫자 형식입니까? 그렇지 않으면 필터링하지 않는 이유를 이해할 수 없습니다. – grahamj42

+0

IN을 사용하면 post_id와 wp_posts의 post_id가 일치하지 않습니다. JOIN을 사용하여 일치 시키거나 = 사용해야합니다 (이 질문에서 허용 된 답변 에서처럼) – Rao

0

는이 같은 코드가 LIMIT에게

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

모든 글에 대한 전체 리뷰가 표시되지 않습니다 –

+0

이렇게하면 모든 post_id에 대한 리뷰가 반환됩니다. post_author로 필터링하지 않음 = 1 – Rao