SQL: UNION을 사용하고 특정 선택에 따라 주문하는 방법은 무엇입니까?
선택할 수 있는 항목은 두 가지 선택 항목:
SELECT id FROM a -- returns 1,4,2,3
UNION
SELECT id FROM b -- returns 2,1
다음과 같은 올바른 행 수를 수신했습니다.1,4,2,3
.
하지만 나는 원합니다.b
테이블 결과 먼저:2,1,4,3
또는2,1,3,4
어떻게 해야 하나요?
(Oracle을 사용하고 있습니다.
원하는 작업:
select * from
(
SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
UNION
SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered
갱신하다
저는 당신이 두 개의 다른 테이블을 가지고 있음에도 불구하고, 당신이 ID에 가입한다는 것을 알아차렸습니다, 그것은 만약 당신이 가지고 있다면.1
두 표 모두에서 한 번만 발생합니다.만약 그게 원하는 행동이라면, 당신은 계속 해야 합니다.UNION
그렇지 않은 경우 다음으로 변경UNION ALL
.
그래서 제가 제안한 코드로 변경하면 두 가지를 모두 얻을 수 있습니다.1
그리고.2
(둘 다에서)a
그리고.b
이 경우 제안된 코드를 다음으로 변경할 수 있습니다.
select distinct id from
(
SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
UNION
SELECT id, 1 as ordered FROM b -- returns 2,1
)
order by ordered
@Adrian 팁을 사용하여 해결책을 찾았습니다.
GROUP BY와 COUNT를 사용하고 있습니다.ORDER BY와 함께 DISTINCT를 사용하려고 했는데 "not selected expression" 오류 메시지가 표시됩니다.
select id from
(
SELECT id FROM a -- returns 1,4,2,3
UNION ALL -- changed to ALL
SELECT id FROM b -- returns 2,1
)
GROUP BY id ORDER BY count(id);
Adrian과 이 블로그에 감사드립니다.
@아드리엔의 대답이 먹히지 않습니다.ORA-01791을 제공합니다.
정답(질문에 대한)은 다음과 같습니다.
select id
from
(SELECT id, 2 as ordered FROM a -- returns 1,4,2,3
UNION ALL
SELECT id, 1 as ordered FROM b -- returns 2,1
)
group by id
order by min(ordered)
설명:
- "UNION ALL"은 두 세트를 결합하는 것입니다.순서 필드가 다르기 때문에 두 집합이 같을 수 없기 때문에 "UNION"이 낭비됩니다.
- 그런 다음 "그룹화 기준"이 중복을 제거합니다.
- "최소 순서(주문)"는 테이블 맨의 요소를 먼저 확인하는 것입니다.
이것은 테이블 b가 더 많거나 다른 요소를 가지고 있을 때에도 테이블 a보다 모든 경우를 해결합니다.
SELECT id, 1 AS sort_order
FROM b
UNION
SELECT id, 2 AS sort_order
FROM a
MINUS
SELECT id, 2 AS sort_order
FROM b
ORDER BY 2;
@아드리안의 대답은 완벽하게 적절합니다. 저는 같은 결과를 얻을 수 있는 또 다른 방법을 공유하고 싶었습니다.
select nvl(a.id, b.id)
from a full outer join b on a.id = b.id
order by b.id;
SELECT id FROM a -- returns 1,4,2,3
UNION
SELECT id FROM b -- returns 2,1
order by 2,1
WIITH subq as (SELECT id FROM a ORDER BY id)
SELECT id FROM subq
UNION
SELECT id FROM b
언급URL : https://stackoverflow.com/questions/6036793/sql-how-to-use-union-and-order-by-a-specific-select
'programing' 카테고리의 다른 글
스프링 부트의 통합 테스트를 위한 리퀴브 베이스 변경 세트를 만드는 방법은 무엇입니까? (0) | 2023.06.20 |
---|---|
bash의 변수에서 mysql 데이터베이스 생성 (0) | 2023.06.20 |
ASP에서 dll.refresh 파일이란 무엇입니까?그물? (0) | 2023.06.20 |
ASP.Net MVC에서 사용자 개체의 사용자 ID를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.20 |
파이썬에서 사용 가능하고 활성화된 네트워크 연결이 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.06.20 |