如何合并(合并)相似的列以通过JOIN删除NULL

RevXaisks

问题信:

我有一个称为“客户”的超类表和两个从客户那里继承的名为“人”和“公司”的子表。因此,客户实体与“人”或“公司”具有一对一关系。

(客户只能是“人”或“公司”的一员,而不能同时属于两者)

如下所示:

Customer                    Person                      Company                
+-------+------+------+     +-------+------+------+     +-------+------+------+
|    cID|  col2|  col3|     |    cID| fname| sname|     |    cID|  name|  col3|
+-------+------+------+     +-------+------+------+     +-------+------+------+
|1      |?     |?     |     |1      |JJ    |AZ    |     |4      |ABCD  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|2      |?     |?     |     |2      |CC    |LL    |     |5      |BCDE  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|3      |?     |?     |     |3      |OO    |BB    |     |6      |CDEF  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|4      |?     |?     |     |7      |JK    |NN    |     |8      |DEFG  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|5      |?     |?     |     |9      |RR    |LW    |     |...    |EFGH  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|6      |?     |?     |     |10     |GN    |QN    |     |...    |FGHI  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|7      |?     |?     |     |...    |XC    |YU    |     |...    |GHIJ  |?     |
+-------+------+------+     +-------+------+------+     +-------+------+------+
|8      |?     |?     |
+-------+------+------+
|9      |?     |?     |
+-------+------+------+
|10     |?     |?     |
+-------+------+------+
|...    |?     |?     |
+-------+------+------+
  • 人员表在单独的名字和姓氏属性中存储客户的全名。
  • 公司表完全在一个字段中完全存储公司的名称。

意向与尝试:

我想做的就是查询数据库,以便可以从“客户”表中选择ID,并同时加入“个人”和“公司”以检索名称属性。

以下是我尝试过的方法:

SELECT      tc."cust_id",
            CONCAT(tp."forename", ' ', tp."surname") AS "name",
            tcp."name"
FROM        "tbl_customer" AS tc
            LEFT JOIN "tbl_person" AS tp
                ON tc."cust_id" = tp."cust_id"
            LEFT JOIN "tbl_company" AS tcp
                ON tc."cust_id" = tcp."cust_id"

执行上面的SQL给出以下结果,而右边是我要实现的目标:

Result                      Result          
+-------+------+------+     +-------+------+
|    cID|  name|  name|     |    cID|  name|
+-------+------+------+     +-------+------+
|1      |JJAZ  |null  |     |1      |JJAZ  |
+-------+------+------+     +-------+------+
|2      |CCLL  |null  |     |2      |CCLL  |
+-------+------+------+     +-------+------+
|3      |OOBB  |null  |     |3      |OOBB  |
+-------+------+------+     +-------+------+
|4      |null  |ABCD  |     |4      |ABCD  |
+-------+------+------+     +-------+------+
|5      |null  |BCDE  |     |5      |BCDE  |
+-------+------+------+     +-------+------+
|6      |null  |CDEF  |     |6      |CDEF  |
+-------+------+------+     +-------+------+
|7      |JKNN  |null  |     |7      |JKNN  |
+-------+------+------+     +-------+------+
|8      |null  |DEFG  |     |8      |DEFG  |
+-------+------+------+     +-------+------+
|9      |RRLW  |null  |     |9      |RRLW  |
+-------+------+------+     +-------+------+
|10     |GNQN  |null  |     |10     |GNQN  |
+-------+------+------+     +-------+------+
|...    |?     |?     |     |...    |?     |
+-------+------+------+     +-------+------+

描述:

如前所述,我试图在同一列下合并“个人”和“公司”的名称。两个表上的标准JOIN均不起作用,因为它将返回NULL结果。由于LEFT JOIN的性质,将期望NULL值。这可以使用SQL UNION非常简单地解决,并且我知道解决方案,但是我正在寻找通过JOIN替代UNION运算符的方法。

无论如何,我可以执行JOIN,分组/合并名称列吗?还是类似的东西?但是不必使用SQL UNION吗?

更新:

Juan Carlos OropezaBecuzz的两个答案同样可以接受。

胡安·卡洛斯·奥罗佩萨

只需包含一个案例即可选择要使用的数据

SELECT      tc."cust_id",
            CASE WHEN tp."forename" IS NULL 
                   THEN tcp."name"
                 ELSE  CONCAT(tp."forename", ' ', tp."surname") 
            AS "name"
FROM        "tbl_customer" AS tc
            LEFT JOIN "tbl_person" AS tp
                ON tc."cust_id" = tp."cust_id"
            LEFT JOIN "tbl_company" AS tcp
                ON tc."cust_id" = tcp."cust_id"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过相似的列合并-R

来自分类Dev

合并名称相似的列

来自分类Dev

如何在SQL中合并相似的列?

来自分类Dev

如何通过JSON Python中的关键属性合并相似的观察结果

来自分类Dev

如何通过一个相似的字符串合并两个txt文件

来自分类Dev

合并2个文件后删除相似的行notepad ++

来自分类Dev

如何合并相似的行并按值将列拆分为行?

来自分类Dev

如何在normalizr函数中合并相似的值?

来自分类Dev

如何合并两个相似的JavaScript代码块?

来自分类Dev

如何在Linux中合并相似的行

来自分类Dev

合并相似的数组,PHP或MySQL

来自分类Dev

合并相似的图像直方图箱

来自分类Dev

在Java流中合并相似的元素

来自分类Dev

合并名称相似的PDF文件

来自分类Dev

在MySQL中合并相似的数据

来自分类Dev

根据相似的内容合并多个Excel行,然后在VBA中增加一列

来自分类Dev

我如何将两个相似的PHP代码合并为一个?

来自分类Dev

我如何在对象数组中合并和分组相似的值

来自分类Dev

如何将Google Analytics(分析)事件与相似的标签合并

来自分类Dev

如果匹配字符串,如何将相似的行合并为一个?

来自分类Dev

当具有相似值的列具有相似的行值时合并两个不同的数据帧

来自分类Dev

.preventDefault()合并两个相似的函数-javascript

来自分类Dev

将子节点与相似的父节点,xml,python合并

来自分类Dev

在spacy的帮助下合并几乎相似的行

来自分类Dev

使用Javascript处理对象并合并相似的数据

来自分类Dev

如何从输入中删除相似的边框?

来自分类Dev

如何删除名称相似的表

来自分类Dev

如何从输入中删除相似的边框?

来自分类Dev

在PIG中如何删除相似的值

Related 相关文章

热门标签

归档