문서번호 : 11-284355
Document Information
•
최초 작성일 : 2022.05.11
•
최종 수정일 : 2022.05.20
•
이 문서는 아래 버전을 기준으로 작성되었습니다.
◦
SinglestoreDB : 7.8
Goal
SingleStore DB 에서 제공하는 Filter on alias 기능에 대한 이해
Solution
1.
정의
SingleStore DB는 표준 SQL의 문법과 순서를 따릅니다.
이에 더해, SELECT list에서 정의된 alias를 WHERE 절 등에 참조 할 수 있도록 허용합니다. 또한, alias를 제거해도 모호성이 생성되지 않는다고 가정하면, 하위 쿼리에는 alias가 필요하지 않습니다
이러한 기능은 Sybase IQ, Redshift 및 기타 일부 데이터베이스 제품과 유사합니다.
2.
예시
•
컬럼 표현식은 컬럼 alias 를 참조할 수 있습니다.
아래의 쿼리는 ‘c’ alias 를 참조하여, ‘c+10’ 컬럼 표현식으로 사용한 예제입니다.
SELECT a + b as c, c + 10 FROM t;
SQL
복사
•
Where 절은 컬럼 alias 를 참조할 수 있습니다.
아래의 쿼리는 ‘c’ alias 를 참조하여, Where 절에 ‘c’ alias를 사용한 예제입니다.
SELECT a + b as c FROM t WHERE c < 100;
SQL
복사
•
Having 절은 컬럼 alias 를 참조할 수 있습니다.
아래의 쿼리는 ‘b’ alias 를 참조하여, Having 절에 ‘b’ alias 를 사용한 예제입니다.
Having 절에 alias 필터링은 SingleStore DB 7.3 버전에서도 가능합니다.
SELECT a + 50 as b, COUNT(*) FROM t GROUP BY a HAVING b < 1000;
SQL
복사
•
모호성이 생성되지 않는다고 가정할 때, alias 제거한 예제입니다.
SELECT a, * from t;
SQL
복사
3.
고려 사항
SingleStore는 select list 에 중복된 column 이름과 중복된 alias를 정의하거나, 중복된 alias 를 허용합니다. 그렇지만, filter-on-alias 동작시, SQL 작성자의 직관적인 생각과 다른 동작을 불러올 수 있어 이런 형태의 구문은 피할 것을 권장합니다.
아래 구문이 실행 가능하더라도, 이를 Common Table Expression 또는 inline view로 전환할 경우 컬럼 구분이 불가능해 ‘Error 1060 - Duplicate column name’ 일 발생하게됩니다.
현재 7.6에서 실행 가능하지만, 코드 변경으로 동작 변경 될 수 있습니다.
select 0 as c, c.c
from (select a/b as c, t.* from t1 t where c > 1) c
where c > 1 ;
SQL
복사
References
1.
select
History
일자 | 작성자 | 비고 |
2022.05.11 | wee | 신규 |
2022.05.20 | jnshin | 고려사항 편집 |