안녕하세요
여기 DB 전문가들이 많으셔서 여쭙습니다.
서로 다른 테이블
Table1
ID Name Age
1 Kim 48
2 Lee 32
Table2
ID Name Age Height
3 Park 35 174
4 Hong 34 182
을 합쳐서
ID Name Age Height
3 Park 35 174
4 Hong 34 182
1 Kim 48
2 Lee 32
이렇게 만들고 싶은데요, 구조가 같을 때는 UNION ALL 을 사용해서 뷰를 잘 쓰다가
새로운 테이블에 컬럼이 많이 붙었습니다. (컬럼수가 많아서 수작업은 엄두가 안나는 상황)
이경우 컬럼수가 많은 테이블에 컬럼수가 적은 테이블 데이터를 합칠 수 있는 쿼리가 궁금합니다.
미리 감사드립니다.
http://www.w3schools.com/sql/sql_insert_into_select.asp
Union all ·Î Ä÷³À» Ãß°¡ÇÏ´Â ¹æ¹ý ¿Ü¿¡´Â ¾øÀ» °Í °°³×¿ä.
´Ù¸¸ ¾öµÎ°¡ ¾È³ª½Å´Ù´Â Ä÷³ ºÎºÐ¿¡ ´ëÇؼ´Â
oracle, mssql, mysql ÀüºÎ ƯÁ¤ Å×ÀÌºí¿¡¼ Ä÷³ À̸§À» »Ì¾Æ³»´Â Äõ¸®°¡ °¡´ÉÇÕ´Ï´Ù. ±×°É ½ÇÇàÇؼ ½±°Ô Ä÷³¸íµéÀ» »Ì¾Æ³»¸é Äõ¸® ¸¸µå´Âµ¥.µµ¿òÀÌ µË´Ï´Ù.
ÇÁ·Î±×·¥À¸·Îµµ ´ç¿¬È÷ °³¹ß°¡´ÉÇÏ°í¿ä
Å×½ºÆ®´Â ¾ÈÇغÃÁö¸¸...
column nameÀ» ³Ö¾î¼ export ÇÏ´Â ¹æ¹ýµéÀÌ ÀÖ¾î¿ä.
¿ÜºÎ·Î ¿Å±â°Å³ª ÇÒ ¶§´Â column nameÀ» ³Ö¾î¾ß ÆíÇÕ´Ï´Ù.
toad°°Àº toolÀ» »ç¿ëÇϽøé ÇØ´ç Å×ÀÌºí¿¡¼ select Ä÷³ ¸®½ºÆ® from table2 °°Àº ¹®ÀåÀ» ÀÚµ¿ »ý¼ºÇØ ÁÖ´Â ±â´ÉÀÌ ÀÖ½À´Ï´Ù.
±×°É ÀÌ¿ëÇϼż ȸ¿ø K´Ô ¹æ½Ä´ë·Î sqlÀ» ±¸¼ºÇϼŵµ µÇ±¸¿ä.
¹æ¹ý2)
¿À¶óŬÀÎ °æ¿ì´Â ¾Æ·¡¿Í °°ÀÌ Çϼŵµ µË´Ï´Ù.
insert ¹®ÀåÀ» ¸¸µé¾îÁÖ´Â sqlÀÔ´Ï´Ù.
-------------------------------------------------------
select REGEXP_REPLACE(REGEXP_REPLACE('insert into ' || table_name || ' (' || cols || ') ' || 'select ' || cols || ' from table1;', '(,*)(\))', '\2'), '(,*)( from)', '\2') sql
from (
select min(table_name) table_name,
min(decode(column_id,1,column_name)) || ',' ||
min(decode(column_id,2,column_name)) || ',' ||
min(decode(column_id,3,column_name)) || ',' ||
min(decode(column_id,4,column_name)) || ',' ||
min(decode(column_id,5,column_name)) cols <!-- Ä÷³ÀÇ °¹¼ö ÀÌ»óÀ¸·Î ¼ýÀÚ¸¦ ´Ã·ÁÁÖ¸é¼ ÀÛ¼º
from all_tab_columns
where table_name = 'TABLE2' -- <-- Àú´Â TABLE2 ´ë½Å¿¡ AUDIT_ACTIONS Å×À̺íÀ» ½è½À´Ï´Ù.
) a
Àú°É µ¹¸®¸é ¾Æ·¡¿Í °°Àº INSERT ¹®ÀåÀÌ ¸¸µé¾îÁý´Ï´Ù.
----------------
insert into AUDIT_ACTIONS (ACTION,NAME) select ACTION,NAME from table1;
Á» º¹ÀâÇÏ°Ô ´À³¥ ¼ö ÀÖ°ÚÁö¸¸ ÂüÁ¶Çϼ¼¿ä.
Ä÷³ÀÌ ¸¹´Ù¸é ¾Æ·¡¿Í °°ÀÌ VIEW·Î ¸¸µé¾î »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.
CREATE VIEW TABLE_ALL
AS SELECT ID
, NAME
, AGE
, HEIGHT
FROM (
SELECT ID
, NAME
, AGE
, 0 AS HEIGHT
FROM TABLE1
UNION ALL
SELECT ID
, NAME
, AGE
, HEIGHT
FROM TABLE2
);