많은 기사를 참조하는 테이블이 있는데이 테이블에는 해당 기사의 태그가 들어 있습니다. 이처럼 :매핑 행에서 기본 선택 SQL
tag text
article_id bigint
내가 태그 집합 모든 article_ids를 선택하려면,이 tag1, tag2로, TAG3하지만 기사는 tag4을 가지고 있다고 말한다, tag5도 첨부.
SELECT article_id
FROM tag WHERE tag='tag1'
INTERSECT
SELECT article_id
FROM tag
WHERE tag='tag2'
INTERSECT
SELECT article_id
FROM tag
WHERE tag='tag3'
을 그리고이를 것이다 :
나는이 일을 알고SELECT article_id
FROM tag
WHERE tag IN ('tag1','tag2','tag3')
GROUP BY article_id
HAVING count(*) = 3
그러나 나는이 작업을 수행 할 수있는 가장 효율적인 방법임을 확실하지 않다. 나는 또한 아래에 놀고있다, 그러나 지금 일하기 위하여 그것을 얻을 수 없다.
SELECT array_agg(tag) as arr,
article_id
FROM tag
GROUP BY article_id
HAVING arr = {tag1,tag2,tag3}
이것은 단지 다른 사람이 발생하는 것 INTERSECT이 경우에 가장 효율적인 쿼리 인 경우 궁금 해서요 공통의 문제처럼 보였다. 그것은 PostgreSQL을위한 것입니다.
당신이 가장 효율적인 쿼리를 찾으려면, 그냥 약간 article_id를 HAVING array_agg (태그 BY 태그 : 텍스트 ORDER)에 의해 태그 그룹에서 SELECT article_id를 "로 작동 재 작성 할 때이'ANALZYE' –