未找到匹配项时连接多个表的SQL查询
我需要有关编写sql查询的帮助。所以我有这样一个场景,它要求我在一个公共键上连接两个表,并使用sql查询检索相关信息。如果找不到匹配项,那么我必须连接到另一个表,并检索一个新键以连接回这些表中的一个。让我用一些示例表更好地解释它未找到匹配项时连接多个表的SQL查询,sql,database,teradata,Sql,Database,Teradata,我需要有关编写sql查询的帮助。所以我有这样一个场景,它要求我在一个公共键上连接两个表,并使用sql查询检索相关信息。如果找不到匹配项,那么我必须连接到另一个表,并检索一个新键以连接回这些表中的一个。让我用一些示例表更好地解释它 EMP_TABLE EMP_ID===NAME===LOCATION 1 CHRIS CA 2 MIKE FL NULL DAVID GA 4 GEORGE TX DESC_TABLE EMP_ID====NA
EMP_TABLE
EMP_ID===NAME===LOCATION
1 CHRIS CA
2 MIKE FL
NULL DAVID GA
4 GEORGE TX
DESC_TABLE
EMP_ID====NAME===JOBDESC
1 CHRIS LAWYER
2 MIKE DOCTOR
3 DAVID ENGINEER
5 GEORGE CEO
NEW_EMP_TABLE
NEW_EMP_ID===EMP_ID===NAME
5 4 GEORGE
这里EMP_表是主表,我们需要这个表中的所有字段加上我的结果集中DESC_表中的JOBDESC字段
下面是我希望在sql查询中捕获的内容:
如果有任何帮助,我们将不胜感激。如果这有什么不同,我们将在Teradata数据库上执行此查询。我想如果您的场景相互排斥,这将非常简单。这意味着下面三个选择不会为同一名员工带来多个记录。但在这种情况下,您需要向我们提供logic关于如何消除重复数据
select EMP_TABLE.*, DESC_TABLE.JOBDESC
from EMP_TABLE
join DESC_TABLE
on EMP_TABLE.EMP_ID= DESC_TABLE.EMP_ID
and EMP_TABLE.EMP_ID is not null
union
select EMP_TABLE.*, DESC_TABLE.JOBDESC
from EMP_TABLE
join NEW_EMP_TABLE
on EMP_TABLE.EMP_ID= NEW_EMP_TABLE.EMP_ID
and EMP_TABLE.EMP_ID is not null
join DESC_TABLE
on NEW_EMP_TABLE.NEW_EMP_ID= DESC_TABLE.EMP_ID
union
select EMP_TABLE.*, DESC_TABLE.JOBDESC
from EMP_TABLE
join DESC_TABLE
on EMP_TABLE.NAME= DESC_TABLE.NAME
and EMP_TABLE.EMP_ID is null
提示:在
EMP\u表
和NEW\u EMP\u表
上通过union获得不同的EMP\u ID,并从DESC\u表
中选择JOBDESC
,其中EMP\u ID
在结果的EMP\u ID
列表中,我不知道为什么要为同一类数据创建一个表。可能是您应该重新构造您的schema@Bharadwaj..如果在DESC_表中没有匹配的EMP_ID,我将不得不从基于EMP_ID的NEW_EMP_表中查找新的EMP_ID,并使用它连接回DESC_表。如果我在EMP_表和NEW_EMP_表上进行合并,并仅获得不同的EMP_ID,那么我将丢失新的EMP_ID行5次,对吗?这意味着我将无法匹配?@zamil,these只是我为了更好地解释场景而放的示例表。实际的表有点不同,但场景仍然是一样的。因为您只需要JOBDESC
,为什么需要加入?在第三种情况下,为什么EMP_ID为null?这不是PK吗?如果您想用NAME加入,那么您可能无法获得准确的结果不会是唯一的。谢谢。我通过对第二个union语句进行轻微修改来实现您的建议。我已将减号运算符合并到EMP_表和DESC_表之间的EMP_ID代码中,这样,只有在DESC_表中不存在的EMP_ID的结果子集才会连接到新的_EMP表。Appreci吃了帮助。