不同表結構或者不同資料型別之間的集合操作

skyin_1603發表於2016-11-15

本應該說兩張表結構不相似的或者表結構相似但資料型別不相同兩個表或者多個表不能進行
集合查詢操作。我們透過以下的測試表明:不同表結構的兩個或多個表之間不能進行集合操作,
但是資料型別不相同的兩個或多個表之間透過轉換函式把欄位的資料型別統一後,可以進行
集合查詢操作。

----嘗試兩張不同表結構的表或者相同欄位數不同資料型別的兩個表進行集合插敘:
--檢視測試表t_iot結構與記錄:

suxing@PROD>desc T_IOT

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 COL1                                      NOT NULL VARCHAR2(10)

 COL2                                      NOT NULL VARCHAR2(20)

 

suxing@PROD>select * from T_IOT;

COL1       COL2

---------- --------------------

susky      guanghzou

susu       beijing

susu       guanghzou

--檢視測試表yourtest結構與記錄: 

suxing@PROD>desc yourtest;

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(3)

 NAME                                               VARCHAR2(6)

 CREATED                                            DATE

 

suxing@PROD>select * from yourtest;

        ID NAME   CREATED

---------- ------ ---------

       125 susu   02-NOV-16

       123 susky  02-NOV-16

       124 hhhh   10-NOV-16

       126 wwww   10-NOV-16

       125 dddd   11-NOV-16

  

---嘗試進行union all集合查詢:

suxing@PROD>select * from t_iot

  2  union all

  3  select * from yourtest;

select * from t_iot

*

ERROR at line 1:

ORA-01789: query block has incorrect number of result columns

 

---建立一個測試表

suxing@PROD>create table mytest

  2  as select name,created

  3  from yourtest;

Table created.

 

--檢視錶結構與記錄:

suxing@PROD>desc mytest;

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 NAME                                               VARCHAR2(6)

 CREATED                                            DATE

 

suxing@PROD>select * from mytest;

NAME   CREATED

------ ---------

susu   02-NOV-16

susky  02-NOV-16

hhhh   10-NOV-16

wwww   10-NOV-16

dddd   11-NOV-16

 

---嘗試再次進行union all集合查詢:

suxing@PROD>select * from t_iot

  2  union all

  3  select * from mytest;

select * from t_iot

       *

ERROR at line 1:

ORA-01790: expression must have same datatype as corresponding expression

#要求對應欄位的資料型別要一致。
 

---透過查詢轉化created欄位的資料型別並進行union all集合查詢:

suxing@PROD>select * from t_iot

  2  union all

  3  select name,to_char(created) from mytest;

COL1       COL2

---------- --------------------

susky      guanghzou

susu       beijing

susu       guanghzou

susu       02-NOV-16

susky      02-NOV-16

hhhh       10-NOV-16

wwww       10-NOV-16

dddd       11-NOV-16

8 rows selected.

#返回8條記錄。

--所以,當兩個表或者多個表有著相同欄位數的時候,當進行集合操作時,
需要把對應的的欄位資料型別轉化成相同的資料型別,長度不嚴格要求。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2128505/,如需轉載,請註明出處,否則將追究法律責任。

相關文章