创建具有特定条件的视图



我有一个这样结构的视图(org_view):

DEPARTMENT_NAME GUILD_NAME TRIBE_NAME
D1              G1         T1
D1              G1         T2
D1              G2         T3
D2              G3         T4

和映射表(table_for_mapping):

TRIBE_NAME  SYSTEM
T1          S1
T4          S1

我想做的是创建一个新的视图,其中GUILD_NAME将被替换为系统,如果部落在映射表中被发现,如果不是公会名称将保留。

示例:new_view:

DEPARTMENT_NAME GUILD/SYSTEM    TRIBE_NAME
D1                S1                T1
D1                G1                T2
D1                G2                T3
D2                S2                T4

我设法为这个创建一个视图:

SELECT org.DEPARTMENT_NAME,
if (org.TRIBE_NAME = map.TRIBE_NAME ,map.SYSTEM,org.GUILD_NAME) as "Guild/System",
org.TRIBE_NAME
from org_view org left join table_for_mapping map 
on org.TRIBE_NAME = map.TRIBE_NAME

问题是当一个系统直接映射到一个公会下。一个公会下可以有多个部落,但是如果一个SYSTEM直接映射到公会下,那么所有的部落都应该映射到SYSTEM。

Ex : GUILD_NAME       TRIBE_NAME
GUILD_EUROPE     GUILD_EUROPE
GUILD_EUROPE     TRIBE_WEST
GUILD_EUROPE     TRIBE_NORTH
GUILD_EUROPE     TRIBE_EAST

在本例中,如果SYSTEM映射到TRIBE_NAME = GUILD_EUROPE:

TRIBE_NAME    SYSTEM
GUILD_EUROPE  SYSTEM_1

然后在新视图中:

GUILD/SYSTEM    TRIBE_NAME
SYSTEM_1        GUILD_EUROPE
SYSTEM_1        TRIBE_EAST
SYSTEM_1        TRIBE_WEST
SYSTEM_1        TRIBE_NORTH

我知道,如果在我创建的视图中需要删除这种情况下,但目前我没有找到任何解决方案,所以这就是为什么我寻求帮助。

谢谢!

据我所知,下面的代码可以解决您的问题

SELECT
org.DEPARTMENT_NAME ,
org.GUILD_NAME ,
coalesce(map2.`SYSTEM` , map.`SYSTEM` , org.GUILD_NAME ) "Guild/System"
from
org_view org
left join table_for_mapping map on
org.TRIBE_NAME = map.TRIBE_NAME
left join table_for_mapping map2 on
org.GUILD_NAME = map2.TRIBE_NAME
;

这个想法是左连接org_viewtable_for_mapping两次,然后利用coalesce函数来确定新列的值。

select org.DEPARTMENT_NAME, if (temp.SYSTEM is not null ,temp.SYSTEM,org.GUILD_NAME) as "Guild/System", org.TRIBE_NAME from org_view org left join (select org.GUILD_NAME,tfm.SYSTEM from org_view org inner join table_for_mapping tfm on org.TRIBE_NAME = tfm.TRIBE_NAME ) temp on temp.GUILD_NAME = org.GUILD_NAME order by org.DEPARTMENT_NAME ASC

查询上面

  1. Check SYSTEM直接映射到公会下。
  2. 如果找到匹配,应该映射到SYSTEM.

最新更新