WITH
tbl_1 AS
(
Select 1 "ID_NUMBER", 'Name for ID 1' "NAME_VARCHAR", To_Date('27.11.1987', 'dd.mm.yyyy') "BIRTH_DATE" From Dual Union All
Select 2 "ID_NUMBER", 'Name for ID 2' "NAME_VARCHAR", To_Date('29.05.1989', 'dd.mm.yyyy') "BIRTH_DATE" From Dual
),
/* ID_NUMBER NAME_VARCHAR BIRTH_DATE
---------- ------------- ----------
1 Name for ID 1 27-NOV-87
2 Name for ID 2 29-MAY-89 */
tbl_2 AS
(
Select 1 "ID_NUMBER", 1 "PROPERTY_ID_NUMBER", 'France' "PROPERTY_STATE_VARCHAR", 150000 "PROPERTY_VALUE_NUMBER", To_Date('12.11.2018', 'dd.mm.yyyy') "PROPERTY_BUYING_DATE" From Dual Union All
Select 1 "ID_NUMBER", 2 "PROPERTY_ID_NUMBER", 'Spain' "PROPERTY_STATE_VARCHAR", 120000 "PROPERTY_VALUE_NUMBER", To_Date('10.03.2019', 'dd.mm.yyyy') "PROPERTY_BUYING_DATE" From Dual Union All
Select 2 "ID_NUMBER", 1 "PROPERTY_ID_NUMBER", 'France' "PROPERTY_STATE_VARCHAR", 200000 "PROPERTY_VALUE_NUMBER", To_Date('11.10.2020', 'dd.mm.yyyy') "PROPERTY_BUYING_DATE" From Dual
),
/* ID_NUMBER PROPERTY_ID_NUMBER PROPERTY_STATE_VARCHAR PROPERTY_VALUE_NUMBER PROPERTY_BUYING_DATE
---------- ------------------ ---------------------- --------------------- --------------------
1 1 France 150000 12-NOV-18
1 2 Spain 120000 10-MAR-19
2 1 France 200000 11-OCT-20 */
tbl_3 AS
(
Select 1 "ID_NUMBER", 'France' "STATE_VARCHAR" From Dual Union All
Select 2 "ID_NUMBER", 'Spain' "STATE_VARCHAR" From Dual
)
/* ID_NUMBER STATE_VARCHAR
---------- -------------
1 France
2 Spain */
2条答案
按热度按时间4xy9mtcn1#
这里的评论有点长。老实说,听起来你想要一个
JOIN
而不是UNION
。联合向现有列添加数据行,连接水平添加数据列。但是,对于您的
UNION
问题,对于不同的表,没有一种简单的方法来执行类似SELECT * UNION SELECT *
的操作,您必须显式地选择所有列。在这种情况下,您需要考虑两件事,这两件事都是因为由联合组合的每个选择必须包含相同数量的列。
1.顶部的
SELECT
控制列的名称,因此在那里处理所有别名1.不存在于
SELECT
中的每一列都需要处理,通常由NULL
或''
处理(ex. col1从顶部
SELECT
返回,但不存在,因此无法从第二个SELECT
拉出)所以你最终会得到这样的结果:
如果您需要更多信息,请编辑您的问题以包括当前查询、表和错误
3qpi33ja2#
让我们试着比较3个不同行数和列数的表的连接和联合。有些是相同的,有些则不是。
样本数据
1.工会
您必须确保所有联合选择语句的列数和数据类型相同。第一个选择语句可以定义这两种类型。如果第一个选择语句选择了空值,则将其转换为适当的数据类型。您还可以在同一列中放入不同来源的数据,因此,为了清楚起见,你可以为每一行添加原点信息。2下面是使用并集选择所有数据的选项之一:
结果
| 数据源|识别码_1|身份证_2|A_名称|日期|A_值|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 表1-名称|1个||ID 1的名称|一九八七年十一月二十七日||
| 表1-名称|第二章||ID 2的名称|一九八九年五月二十九日||
| 表2-所有权|1个|1个|法国|2018年11月12日|十五万|
| 表2-所有权|1个|第二章|西班牙|2019年3月10日|十二万|
| 表2-所有权|第二章|1个|法国|2020年10月11日|二十万|
| 表3-国籍|1个||法国|||
| 表3-国籍|第二章||西班牙|||
1.加入
结果
| 识别号|A_名称|出生|属性ID|属性_状态|购买|属性_值|国籍|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 1个|ID 1的名称|一九八七年十一月二十七日|1个|法国|2018年11月12日|十五万|法国|
| 1个|ID 1的名称|一九八七年十一月二十七日|第二章|西班牙|2019年3月10日|十二万|法国|
| 第二章|ID 2的名称|一九八九年五月二十九日|1个|法国|2020年10月11日|二十万|西班牙|
根据你的数据结构和你想要得到什么,你将选择一种或另一种方式。