Kan*_*kan 187
对于具有较少列的表,将额外列添加为null
Select Col1, Col2, Col3, Col4, Col5 from Table1
Union
Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2
Run Code Online (Sandbox Code Playgroud)
我来到这里并按照上面的回答.但是数据类型顺序不匹配导致错误.以下来自另一个答案的描述将派上用场.
结果是否与表格中的列序列相同?因为oracle在列顺序中是严格的.以下示例产生错误:
create table test1_1790 (
col_a varchar2(30),
col_b number,
col_c date);
create table test2_1790 (
col_a varchar2(30),
col_c date,
col_b number);
select * from test1_1790
union all
select * from test2_1790;
Run Code Online (Sandbox Code Playgroud)
ORA-01790:表达式必须与相应的表达式具有相同的数据类型
如您所见,错误的根本原因在于使用*作为列列表说明符所暗示的不匹配列排序.通过显式输入列列表可以轻松避免此类错误:
从test1_1790 union中选择col_a,col_b,col_c,从test2_1790中选择col_a,col_b,col_c; 此错误的更常见情况是,当您无意中交换(或转移)SELECT列表中的两个或更多列时:
select col_a, col_b, col_c from test1_1790
union all
select col_a, col_c, col_b from test2_1790;
Run Code Online (Sandbox Code Playgroud)
或者,如果上述方法无法解决您的问题,那么如何在列中创建ALIAS :(查询与您的查询不同,但这里的重点是如何在列中添加别名.)
SELECT id_table_a,
desc_table_a,
table_b.id_user as iUserID,
table_c.field as iField
UNION
SELECT id_table_a,
desc_table_a,
table_c.id_user as iUserID,
table_c.field as iField
Run Code Online (Sandbox Code Playgroud)
通常,当您使用基于集合的运算符时,您需要具有相同数量的列,因此Kangkan 的答案是正确的。
\nSAS SQL 有特定的运算符来处理这种情况:
\n\n\n\n对应 (CORR) 关键字
\n仅当指定集合运算符时才使用 CORRESPONDING 关键字。CORR 导致 PROC SQL 按名称而不是序号位置来匹配表表达式中的列。除 OUTER UNION 运算符外,名称不匹配的列将从结果表中排除。
\n
SELECT * FROM tabA\nOUTER UNION CORR\nSELECT * FROM tabB;\nRun Code Online (Sandbox Code Playgroud)\n为了:
\n+---+---+\n| a | b |\n+---+---+\n| 1 | X |\n| 2 | Y |\n+---+---+\n\nOUTER UNION CORR\n\n+---+---+\n| b | d |\n+---+---+\n| U | 1 |\n+---+---+\n\n<=>\n\n+----+----+---+\n| a | b | d |\n+----+----+---+\n| 1 | X | |\n| 2 | Y | |\n| | U | 1 |\n+----+----+---+\nRun Code Online (Sandbox Code Playgroud)\nU-SQL支持类似的概念:
\n\n\n\n外
\n需要 BY NAME 子句和 ON 列表。与其他集合表达式相反,OUTER UNION 的输出模式包括两侧的匹配列和不匹配列。这会造成一种情况,即来自一侧的每一行都有“缺失的列”,这些列仅存在于另一侧。对于此类列,为“缺失单元格”提供默认值。对于可为 null 的类型,默认值为 null;对于不可为 null 的类型,默认值为 .Net(例如,对于 int 为 0)。
\n按名字
\n与 OUTER 一起使用时需要。该子句指示联合不是根据位置而是根据列的名称来匹配值。如果未指定 BY NAME 子句,则按位置进行匹配。
\n如果 ON 子句包含 \xe2\x80\x9c*\xe2\x80\x9d 符号(可以将其指定为列表的最后一个或唯一成员),则允许超出 ON 子句中的名称匹配, result\xe2\x80\x99s 列包括所有匹配的列,按照它们在左侧参数中出现的顺序排列。
\n
和代码:
\n@result = \n SELECT * FROM @left\n OUTER UNION BY NAME ON (*) \n SELECT * FROM @right;\nRun Code Online (Sandbox Code Playgroud)\n编辑:
\nKQL支持外联合的概念:
\n\n\n种类:
\n内部 - 结果具有所有输入表共有的列子集。
\n外部 - 结果包含任何输入中出现的所有列。未由输入行定义的单元格将设置为 null。
\n
例子:
\nlet t1 = datatable(col1:long, col2:string) \n[1, "a", \n2, "b",\n3, "c"];\nlet t2 = datatable(col3:long)\n[1,3];\nt1 | union kind=outer t2;\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n+------+------+------+\n| col1 | col2 | col3 |\n+------+------+------+\n| 1 | a | |\n| 2 | b | |\n| 3 | c | |\n| | | 1 |\n| | | 3 |\n+------+------+------+\nRun Code Online (Sandbox Code Playgroud)\n\n\nUNION (ALL) BY NAME 子句可用于按名称(而不是按位置)组合不同表中的行。UNION BY NAME 不要求两个查询具有相同的列数。仅在其中一个查询中找到的任何列都将在另一个查询中填充 NULL 值。
\nRun Code Online (Sandbox Code Playgroud)\nSELECT * FROM capitals UNION BY NAME SELECT * FROM weather;\n\n\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 city \xe2\x94\x82 country \xe2\x94\x82 degrees \xe2\x94\x82 date \xe2\x94\x82\n\xe2\x94\x82 varchar \xe2\x94\x82 varchar \xe2\x94\x82 int32 \xe2\x94\x82 date \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n\xe2\x94\x82 Amsterdam \xe2\x94\x82 NULL \xe2\x94\x82 10 \xe2\x94\x82 2022-10-14 \xe2\x94\x82\n\xe2\x94\x82 Seattle \xe2\x94\x82 NULL \xe2\x94\x82 8 \xe2\x94\x82 2022-10-12 \xe2\x94\x82\n\xe2\x94\x82 Amsterdam \xe2\x94\x82 NL \xe2\x94\x82 NULL \xe2\x94\x82 NULL \xe2\x94\x82\n\xe2\x94\x82 Berlin \xe2\x94\x82 Germany \xe2\x94\x82 NULL \xe2\x94\x82 NULL \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
| 归档时间: |
|
| 查看次数: |
144792 次 |
| 最近记录: |