2010-07-16 3 views

답변

19

은 예, UNION 사용 -

CREATE VIEW vw_combined AS 
    SELECT * FROM TABLE1 
    UNION ALL 
    SELECT * FROM TABLE2 

을 ... 동일한 수의 열, 및 각 위치에서의 데이터 유형이 일치가 있어야합니다. JOIN을 사용하여 ..preferrably

:

CREATE VIEW vw_combined AS 
    SELECT * 
    FROM TABLE1 t1 
    JOIN TABLE2 t2 ON t2.col = t1.col 

그러나 내가보기에 따라에 대해 경고 할 - 구체화하지 않을 경우, 그들은 단지 SQL 문을 준비하고 있습니다. 성능상의 이점은 없으며 다른 뷰를 기반으로 뷰를 작성하면 성능에 부정적인 영향을 줄 수 있습니다. 또한보기가 부서지기 때문에 변경 될 수 있으며 문제가있는 경우 지원보기를 사용할 때까지 알 수 없습니다.

+3

"JOIN을 사용하는 것이 바람직합니다." 나는 table1과 table2의 행이 조인이 의미있는 방식으로 관련되어 있다는 암시를 보지 못했습니다. OP는 "동일한 필드를 가짐"상태 였기 때문에 유형이 일치하면 조합이 작동합니다. –

+1

@Shannon 세브란스 : 논리 검토를 제안하거나 도움이 될만한 추가 정보를 제공하는 데있어서 해를 보지 않습니다. –

+4

두 개의 테이블을 결합하여 두 개 이상의 테이블을 조합하여 두 개 이상의 테이블을 조합하여 결과를 길게 만들거나 넓히기 때문에 조인을 언급하는 것이 좋음에 동의합니다. (그 BTW +1). 나는 OP가하려고하는 것을 확실하게 알지 못하면 다른쪽에 우선적으로 우위에 있다고 생각하지 않는다. –

1
create or replace view view_name as 
select * from table_1 
union all select * from table_2 

참고 :보기에 열이 뷰가 작성 될 때 설정됩니다. 뷰 생성 후 table_1 및 table_2에 열을 추가하는 것은 view_name에 표시되지 않습니다. 새 열을 표시하려면 위의 DDL을 다시 실행해야합니다.

당신이 행을 복제하려면

단일 행 (그러나 서버에 대한 잠재적으로 더 많은 작업)에 collasped 수 :

create or replace view view_name as 
select * from table_1 
union select * from table_2 

일반적으로는 선택 목록에서 *을 사용하는 나쁜 형태이지만, 쿼리 가정 보기를 사용하여 필요한 것을 선택하려고합니다. 명시 적으로 모든 열의 이름을 지정하는 대신 여기에서 사용합니다. (특히 table_1과 table_2가 변경 될 때 열 이름을 추가 할 필요가 없기 때문에 특히 그렇습니다.)

+0

+1 : 생성시 열을 언급하는 걸 잊었습니다. –

+0

@OMG 조랑말 : 저를 최근에 물었습니다. 메모리 뱅크에서 신선했습니다. –

관련 문제