보드 게시판에서 카테고리가 두개로 나뉘어져 있습니다.
select Category1 as cat1, Category2 as cat2 from board;
---------------
cat11 | cat2
---------------
Blog | note
Blog | diary
Code | tutorial
Code | tutorial
Code | note
---------------
목적은, 각 카테고리의 값들을 가져오는데, 중복은 재외하는것 입니다.
select district Category1 as cat1 from board;
select district Category2 as cat2 from board;
-------
cat1
-------
Blog
Code
-------
-------
cat2
-------
note
diary
tutorial
note
-------
하지만 굳이 query문을 두번이나 쓸 필요가 있을까 싶었기 때문에, 삽질과 질문을 한 끝에
UNION 을 사용하면 된다는것을 알았습니다.
UNION은 두 select문의 출력할 rows가 동일할때, 두 출력문을 하나로 합치는 기능인데요,
이때 중복 또한 예외처리가 되었습니다.
위의 코드에서 사용하기위해, 각 각의 select문을 동일한 출력으로 만들면 되는데요,
select Category1 as cat1, NULL as cat2 from board
를 치게 되면
----------
cat1 | cat2
----------
Blog | NULL
Blog | NULL
Code | NULL
Code | NULL
Code | NULL
-----------
으로 나오게 됩니다.
동일하게 cat2 에도 같은 select문을 사용하여
select NULL as cat1, Category2 as cat2 from board
---------------
cat1 | cat2
---------------
NULL | note
NULL | diary
NULL | tutorial
NULL | tutorial
NULL | note
---------------
그럼 이제 두 select문을 합치게되면,
SELECT Category1 AS cat1, NULL AS cat2
FROM board
UNION
SELECT NULL AS cat1, Category2 AS cat2
FROM board;
그리고 출력물은
---------------
cat1 | cat2
---------------
NULL | note
NULL | diary
NULL | tutorial
Blog | NULL
Code | NULL
---------------
요로코롬 나오게 됩니다!
이게 쿼리 두번 날리는것보다 빠른건지 데이터가 많이 없어서 증명은 못하겠지만..
더 효율적이라고 판단하고 자위하는중..
제 케이스에서는
각 각 select문은 230ms 가 걸렸으나,
union을 통한 한번의 query문은 280ms가 갈렸습니다
댓글 없음:
댓글 쓰기