我有一个table_A列有一个列A1,A2table_b有一组列B1,B2
它发生了,A2=B1但其余的列不匹配(并且不应该).我想附上表格,以便我使用UNION ALL
对于非匹配列,我null as COLUMN_NAME在UNION语句的两侧使用
CREATE VIEW MY_VIEW AS
SELECT
TABLE_A.A1,
TABLE_A.A2,
null as B2
from TABLE_A
union all
SELECT
null as A1,
TABLE_B.B1 as A2,
TABLE_B.B2 as B2
from TABLE_B;
Run Code Online (Sandbox Code Playgroud)
输出以下错误:
Error report: SQL Error: ORA-01790: expression must have same datatype as corresponding expression 01790. 00000 - "expression must have same datatype as corresponding expression"
Run Code Online (Sandbox Code Playgroud)
是因为空值吗?
您需要将NULL显式地转换为上部的适当类型SELECT.
CREATE VIEW MY_VIEW AS
SELECT
TABLE_A.A1,
TABLE_A.A2,
CAST(null AS <type_of_TABLE_B_B2>) as B2
from TABLE_A
union all
SELECT
null,
TABLE_B.B1,
TABLE_B.B2
from TABLE_B;
Run Code Online (Sandbox Code Playgroud)
至于替代品,@ evilive说你可以使用固定值作为VARCHAR的空字符串('')或NUMBERs的零,但我认为显式转换是更好的解决方案,因为它是显而易见的,不会引起意外