当前位置: 首页 > 面试题库 >

SQL:两个不具有完整列匹配项的表的并集

夹谷星纬
2023-03-14
问题内容

我有一个table_A具有一组列的A1A2和表-B其中有一组列B1B2

碰巧发生了,A2=B1但是其余的列不匹配(并且不应该匹配)。我想追加表格,以便使用UNION ALL

对于不匹配的列,我null as COLUMN_NAMEUNION语句的两边使用,

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;

输出以下错误:

Error report: SQL Error: ORA-01790: expression must have same datatype as corresponding expression 01790. 00000 - "expression must have same datatype as corresponding expression"

是因为空值吗?


问题答案:

您需要在上层将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;

至于 @evilive 说的替代方法,您可以将固定值用作 VARCHAR的
空字符串('')或将NUMBER用作零,但我认为显式强制转换是更好的解决方案,因为它很明显并且不会引起意外

SQLFiddle



 类似资料:
  • 问题内容: 我想从具有不同列名的两个表中返回一行结果集,每个表中的每一行一行。 结果应如下所示,空格可以为null,第二半的team_id来自coach_id: 这是模式: 试过这个,但还没真正接近: 问题答案: nulnullry这

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 我想获取两个列表并查找两个列表中都出现的值。 [5]例如,将返回。 问题答案: 使用,它快速且可读。

  • 我有两个不同的DataFrames,我想合并与和列。我看到有一些线程,但我找不到我的问题的解决方案。我也读了这份文件,并尝试了不同的组合,但是,不工作得很好。 我的两个不同数据帧的示例, 正如您在两个数据帧中看到的,以开始,我想加入,这基本上是匹配的日期和时间。到目前为止,我使用前面的线程和上面提到的文档尝试了许多不同的组合。例如,, 这是右DataFrame的值。我知道,我不必同时使用和列,但是

  • 问题内容: 除了官方文档,我只发现了这篇文章。但是它很旧而且不完整(仅可用选项)。例如,我都找不到选项。 如果存在完整列表,在哪里可以找到? 问题答案: 您可以使用 打印所有选项及其默认值。如果您具有调试版本,则也可以使用此命令为各种选项打印注释: 附注:此博客文章中有大多数描述:http : //stas-blogspot.blogspot.bg/2011/07/most- complete-l

  • 我有一个正在测试的方法,它返回一个对象列表。。。例如“Person”对象。 我有一个“预期的最后名字”列表来验证结果。 我目前有一个工作测试,它循环遍历“expectedLastNames”中的名称,并断言每个名称都包含在“Person”对象列表中。与此类似(请注意,以下代码段位于Kotlin中): 当断言通过时,这非常有效,并验证了我的方法。然而,当测试失败时,这是非常麻烦的,因为一旦遇到缺少的