반응형
SQL - 이중 행이 있는 경우에만 행 선택
구문: MariaDB
테이블 구조:
id [INT], value [INT], flag [INT]; id + flag is a primary key (no duplicate id + flag pair)
샘플 데이터:
[id] | [value] | [flag]
111 | 16 | 0 # row 111, 18, 1 exists (3rd)
222 | 17 | 1 # row 222, 20, 0 exists (5th)
111 | 18 | 1 # row 111, 16, 0 exists (1st)
333 | 19 | 1 # no row 333, ??, 0 exists
222 | 20 | 0 # row 222, 17, 1 exists (2nd)
444 | 21 | 0 # no row 444, ??, 1 exists
선택해야 합니다.value
대응하는 쌍flag=0
그리고.flag=1
두 행이 모두 테이블에 존재하는 경우에만 해당됩니다.마법에 걸린 후 예상되는 결과SELECT
스테이트먼트:
[value_0] | [value_1]
16 | 18
20 | 17
내가 시도한 것:
SELECT id, value, flag FROM table as p WHERE COUNT(SELECT id from table where id = p.id) = 2
다른 건 생각할 수 없었어SQL 지식은 매우 기초적입니다.날 도울 수 없다면 최소한 내가 어떻게 할 수 있는지 보여 줘SELECT
이와 같은 것
[value_0] | [value_1]
NULL | 19
16 | 18
20 | 17
21 | NULL,
이게 더 쉬울 것 같아서요.이 선택 테이블에는 NULL 값이 정확히1개 포함되어 있는 행도 포함되어 있다는 점(원래 테이블에는 대응하는 플래그가 없습니다)을 제외하면 예상 출력과 동일합니다.
감사해요.
셀프 가입은 매우 간단합니다.
select t1.value value_0, t2.value value_1
from tablename t1 inner join tablename t2
on t1.id = t2.id and t1.flag = 0 and t2.flag = 1
데모를 참조해 주세요.
결과:
> value_0 | value_1
> ------: | ------:
> 20 | 17
> 16 | 18
집약 사용:
select id, min(value), max(value)
from t
group by id
having min(flag) = 0 and max(flag) = 1;
에 대해 2개 이상의 행이 있을 수 있는 경우id
, 원하는 경우group_concat()
:
select id, group_concat(value)
from t
group by id
having min(flag) = 0 and max(flag) = 1;
값을 정렬하려면 조건부 집약을 사용합니다.
select id,
max(case when flag = 0 then value end) as value_0,
max(case when flag = 1 then value end) as value_1
from t
group by id
having min(flag) = 0 and max(flag) = 1;
@forpas 답변은 맞지만 null 값이 필요한 경우 다음과 같은 작업을 수행할 수 있습니다.
select * from
(select id,value,flag from tablename where flag = 0) as val0
LEFT JOIN (select id,value,flag from tablename where flag = 1) as val1 on val0.id = val1.id
UNION
select * from
(select id,value,flag from tablename where flag = 0) as val0
RIGHT JOIN (select id,value,flag from tablename where flag = 1) as val1 on val0.id = val1.id
데모를 보려면 여기를 클릭하십시오.
언급URL : https://stackoverflow.com/questions/64930390/sql-select-row-only-if-dual-row-exists
반응형
'programing' 카테고리의 다른 글
Python 향후 5분 후 unix 타임스탬프 생성 (0) | 2023.01.03 |
---|---|
기본 동작을 깨지 않고 Python에서 __getattr__을(를) 덮어쓰려면 어떻게 해야 합니까? (0) | 2022.12.29 |
쿠베르네테스 마리아드브 갈레라 단일 노드 (0) | 2022.12.29 |
NULL 재정의 (0) | 2022.12.29 |
MySQL 인증 플러그인을 'caching_sha2_password'로 변경합니다. (0) | 2022.12.29 |