SQL: 주어진 모든 값을 가진 그룹만 선택하려면 어떻게 해야 합니까?
이런 테이블(join과 where를 사용하여 알게 된)이 주어졌습니다.
| post_id | comment_id |
| 1 | 100 |
| 1 | 101 |
| 1 | 102 |
| . 2 . | . 100 . |
| . 3 . | . 101 . |
| . 3 . | . 102 . |
1개 또는 복수의 코멘트 ID 리스트가 주어졌습니다.
(100, 101)
게시물에 지정된 comment_ids가 모두 포함되어 있지 않은 게시물만 찾습니다.
따라서 이 테이블과 (100,101)의 comment_id 목록에서는 post id(2,3)를 반환해야 합니다.post id 2와 3에는 모두 코멘트 100과 101이 없기 때문입니다.
(101)의 comment_id 목록에서는 post id (2)를 반환해야 합니다.
comment_id가 (103)인 경우 이러한 게시물에는 103(존재하지 않음)이 없기 때문에 post_id(1,2,3)를 반환해야 합니다.
편집:
이 코드로 comment_id를 1개만 입력해도 동작할 수 있었습니다.
select post_id
from table_name
group by post_id
having count(*) = sum( comment_id not in (100) )
Gordon의 답변에서 "not"을 추가했는데, 이러한 코멘트를 여러 개 사용할 때는 다음과 같습니다.
having count(*) = sum( comment_id not in (100, 102) )
그런 다음 모든 post_ids(1, 2, 3)를 되돌립니다.post_id(2,3)만 반환해야 합니다.Post_id 1에는 100과 102의 comment_ids가 모두 있으므로 쿼리에 포함할 수 없습니다.
복수의 코멘트 ID를 받아들이려면 어떻게 해야 하나요?
사용할 수 있습니다.group by그리고.having:
select post_id
from t
group by post_id
having count(*) = sum( comment_id in (2, 3) );
이것은 테이블에 중복이 없다고 가정합니다.가능한 경우:
having count(distinct comment_id) = count(distinct case when comment_id in (2, 3) then comment_id end)
편집:
제가 원문을 잘못 읽었나 봐요.댓글 달린 거 갖고 싶은 줄 알았는데원하는 것은 다음과 같습니다.
select post_id
from t
group by post_id
having 2 <> sum( comment_id in (2, 3) );
당신의 질의에 따라 각 게시물에는 최대 3개의 comment_id가 있어야 합니다.따라서 동일하지 않은 상태에서 찾으려는 문의는 다음과 같습니다.
SELECT POST_ID FROM TABLE
GROUP BY POST_ID HAVING
COUNT(Distinct COMMENT_ID) <3
언급URL : https://stackoverflow.com/questions/54913331/sql-how-do-you-only-select-the-groups-where-any-given-group-has-all-of-the-valu
'programing' 카테고리의 다른 글
| require, include, require_once와 include_once의 차이는 무엇입니까? (0) | 2022.11.04 |
|---|---|
| 상속이 있는 @Data 주석 lombok의 warning equals/hashCode (0) | 2022.11.04 |
| XSD에서 JAXB 클래스를 생성하는 방법 (0) | 2022.11.03 |
| django order_by 쿼리 세트, 오름차순 및 내림차순 (0) | 2022.11.03 |
| ValueError: 배열 요소를 시퀀스로 설정합니다. (0) | 2022.11.03 |