source

oracle: from 절에 별칭을 할당할 수 있습니까?

manycodes 2023. 8. 24. 22:16
반응형

oracle: from 절에 별칭을 할당할 수 있습니까?

from 절에 별칭을 지정할 수 있습니까?예:

select a - b "Markup" from retail a, cost b;

편집: 죄송합니다. 제가 그것을 너무 빨리 입력해서 말이 안 될 정도로 질문을 단순화하려고 했습니다.

제가 실제로 하려고 하는 것은 별칭을 사용하여 동일한 표에 있는 두 게시 날짜 사이의 월을 비교하는 것입니다.제가 찾은 효과는 다음과 같습니다.

select distinct to_char(months_between((select distinct pubdate
                                        from books3 
                                        where pubid = 2), 
                                       (select distinct pubdate 
                                        from books3 
                                        where pubid = 4)), '99.99') "Answer"
                              from books3

나는 그것이 다음과 같이 보이기를 원했습니다.

select distinct months_between(a,b)
from (select distinct pubdate 
       from books3 
       where pubid = 2 as a), 
     (select distinct pubdate 
      from books3 
      where pubid = 4 as b)

하지만 그것은 효과가 없습니다.

예, Oracle은 테이블 별칭을 지원합니다.지원합니다.AS에서SELECT목록에 있지만 에 없습니다.FROM목록:

SELECT a.col - b.col AS markup
  FROM RETAIL a,
       COST b
 WHERE b.id = a.id

대부분의 데이터베이스는 다음을 생략할 수 있습니다.AS키워드

즉, 테이블 별칭은 열 별칭이 아닙니다. 예제 업데이트에서 볼 수 있듯이 SELECT 절의 각 테이블에 있는 특정 열을 참조해야 합니다.또한 추가했습니다.WHERE쿼리가 데카르트 제품을 반환하지 않도록 하는 기준입니다.

테이블 별칭은 파생된 테이블/인라인 보기에 필요한 경우가 있습니다(용어가 매우 모호하지만, AKA 하위 쿼리).

SELECT x.col
  FROM (SELECT t.col,
               MAX(t.date)
          FROM TABLE t
      GROUP BY t.col) x

질문은 다음과 같습니다.

문제는 테이블 별칭을 파생된 테이블 내에 배치할 때 테이블 별칭을 대괄호/괄호 밖에 있어야 한다는 것입니다.

SELECT DISTINCT TO_CHAR(MONTHS_BETWEEN(x.pubdate, y.pubdate), '99.99') AS "Answer"
 FROM (SELECT DISTINCT a.pubdate FROM BOOKS3 a WHERE a.pubid = 2) x,
      (SELECT DISTINCT b.pubdate FROM BOOKS3 b WHERE b.pubid = 4) y

당신이 구별이 필요한 이유는 데카르트 제품 때문입니다.

당신이 가진 것에 가장 가까운 것은 그것을 옮기는 것입니다.AS alias비밀리에

select distinct months_between(a.pubdate,b.pubdate)
from (select distinct pubdate 
       from books3 
       where pubid = 2) as a ,
     (select distinct pubdate 
      from books3 
      where pubid = 4) as b;

하지만 여전히, 그 질문은 별로 의미가 없습니다.2개의 레코드가 있는 경우pubid=23의 경우pubid=4출력에 6개의 행이 있습니다.

months_between(a1, b1)
months_between(a2, b1)
months_between(a1, b2)
months_between(a2, b2)
months_between(a1, b3)
months_between(a2, b3)

저는 당신이 실제로 어떤 그룹화를 진행하고 있다고 생각합니다. 그래서 이것은 pubid=2와 pubid=4 항목을 부키드당 수준으로 비교할 것입니다.

select
    bookid,
    to_char(months_between(
        max(case when pubid=2 then pubdate end),
        max(case when pubid=4 then pubdate end)), '99.99') "Answer"
from books
group by bookid;

언급URL : https://stackoverflow.com/questions/4940530/oracle-can-you-assign-an-alias-to-the-from-clause

반응형