FROM의 하위 쿼리에는 별칭이 있어야합니다.


91

다음과 같은 오류를 반환하는 PostgreSQL로 작성한이 쿼리가 있습니다.

[Err] 오류 :
LINE 3 : FROM (SELECT DISTINCT (식별자) AS made_only_recharge

다음은 전체 쿼리입니다.

SELECT COUNT (made_only_recharge) AS made_only_recharge
FROM (
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER = '0130'
    EXCEPT
    SELECT DISTINCT (identifiant) AS made_only_recharge
    FROM cdr_data
    WHERE CALLEDNUMBER != '0130'
)

Oracle에서 잘 작동하는 유사한 쿼리가 있습니다. 유일한 변경 사항은 EXCEPTOracle에서 MINUS키워드 로 대체 한 것입니다 . 나는 Postgres를 처음 접했고 그것이 무엇을 요구하는지 모릅니다. 이것을 처리하는 올바른 방법은 무엇입니까?


3
첫 번째 where 절이 이미 예외를 제외하고 있으므로 예외가 필요하지 않습니다 CALLEDNUMBER = '0130'.
— Clodoaldo Neto 2013

이 오류는 여전히 ... 포스트 그레스 (11) FWIW으로 발생
— rogerdpack

답변:


134

ALIAS하위 쿼리에 추가 ,

SELECT  COUNT(made_only_recharge) AS made_only_recharge
FROM    
    (
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER = '0130'
        EXCEPT
        SELECT DISTINCT (identifiant) AS made_only_recharge
        FROM cdr_data
        WHERE CALLEDNUMBER != '0130'
    ) AS derivedTable                           -- <<== HERE

18
@JohnWoo 이것에 대해 감사하지만 왜 필요합니까 (여기서 이론 질문을하고 있다고 생각합니다)?
— Andrew Cassidy

1
@AndrewCassidy 쿼리에 제약 조건을 더 추가 할 수 있도록 정의해야합니다 (WHERE derivedTable. <attribute> = 5). 그렇지 않으면 db가 하위 쿼리를 참조하는 방법을 알지 못합니다
— stackhelper101

36
@AndrewCassidy 그것은 단지 불행한 구문입니다. 해당 하위 쿼리를 참조하지 않는 한 별칭이 무엇인지는 중요하지 않습니다. 개인적으로 저는를 사용 AS pg_sucks하고 있습니다. "글쎄요, 여기에 중복 식별자가 있지만 내부적으로 일부를 생성 할 수 있습니다. postgres!" :)
— Tregoreg

1

중첩 테이블의 경우 일부 DBMS는 MySQL 및 Oracle과 같은 별칭을 사용해야하지만 다른 DBMS는 이러한 엄격한 요구 사항이 없지만 내부 쿼리의 결과를 대체하기 위해 추가 할 수 있습니다.


1
귀하의 문구는 Oracle과 MySQL 모두에 대해 그러한 요구 사항 이 있음을 시사 합니다. 내가 제대로 읽고 있습니까?
— Scratte

@Scratte 나는 당신이 옳다고 생각하고 문구가 뒤집 혔습니다. "MySQL과 Oracle을 제외한 나머지"는 "Postgresql이지만 MySQL과 Oracle과 같은 다른 시스템"이어야한다고 생각합니다. 물론 그것은 여전히 ​​실행되는 문장이며 더 개선 될 수 있습니다. 2013 답변은 괜찮 으며이 답변은 아무것도 추가하지 않으므로 (필요한 경우 2013 답변에 대한 의견) 후자는 제거해야합니다.
— 제한 속죄
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.