2012-12-22 2 views
2

3 개의 테이블이 있습니다.MySQL - 쿼리 구문

news: 
id 
title 

categories:  
id 
name 

newsEachCategories: 
postId 
categoryId 

표 newsEachCategories는 각 게시물의 ID와 게시 된 카테고리의 ID를 보유합니다.

따라서 ID가 13 인 게시물이 카테고리 6 및 7에 게시 된 경우 하나의 "postId 13, categoryId 6"및 "postId 13, categoryId 7"의 두 가지 항목이 있습니다.

그래서 범주에있는 모든 게시물을 찾기 위해 (예를 들어 5의 ID로 카테고리) 내가 사용 : 나는 두 범주는 게시물을 선택하려면 내 쿼리를 synxtax 방법

SELECT news.title , news.editedTitle , news.id 
FROM news JOIN newsEachCategories 
ON news.id = newsEachCategories.postId 
WHERE newsEachCategories.categoryId = 5 

5와 6?

답변

4

두 범주에 모두있는 결과 만 반환하려면 집합체를 사용하고 HAVING 절에서 2 개의 결과가 반환되는지 확인하십시오.

이 솔루션에서는 COUNT()/postId을 반환하고 두 범주에있는 제한을 반환하는 하위 쿼리에 가입했습니다. 이것은 기본 테이블에 다시 결합되어 해당 특정에 대해 원하는 나머지 열을 얻습니다. news.id.

SELECT 
    news.title, 
    news.editedTitle, 
    news.id 
FROM 
    news 
    /* Join against subquery to count occurrences in newsEachCategories */ 
    JOIN (
    SELECT postId, COUNT(DISTINCT categoryId) AS postcount 
    FROM newsEachCategories 
    /* Limit to categories 5 & 6 */ 
    WHERE categoryId IN (5, 6) 
    GROUP BY postId 
    /* Ensures a result was returned for each category 5, 6 */ 
    HAVING postcount = 2 
) postCounts ON news.id = postCounts.postId