我有两张a桌和b桌:
表-a-表示人员的基本信息
emp_id | email | name
----------------------------------------
1 | abc@gmail.com | john
2 | dbc@gmail.com | john1
3 | cbc@gmail.com | john2
4 | xbc@gmail.com | john3
5 | xac@gmail.com | john4
表-b表示人员处理的位置
约翰是处理地区和区域约翰尼是处理地区和领土等。。。
位置类型的顺序如下:区域->区域->区域->区域优先于区域,以此类推。。
id | emp_id | locationType
--------------------
1 | 1 | Region
2 | 2 | Area
3 | 3 | Area
4 | 4 | Territory
5 | 1 | Zone
6 | 2 | Territory
7 | 5 | Zone
8 | 5 | Area
我想把那些负责高级职位的人找来。假设john处理region和zone,所以我想显示region作为region具有更高的优先级,同样john1处理territory和area,所以我只想显示area作为,因为area具有更高的优先级
我想要的输出:
id | emp_id | name | locationType
----------------------------------------
1 | 1 | john | Region
5 | 5 | john4 | Zone
3 | 3 | john1 | Area
4 | 4 | john2 | Area
4 | 4 | john3 | Territory
我得到了什么
id | emp_id | name | locationType
----------------------------------------
1 | 1 | john | Region
1 | 1 | john | Zone
5 | 5 | john4 | Zone
5 | 5 | john4 | Area
2 | 2 | john1 | Area
3 | 3 | john2 | Area
4 | 4 | john3 | Territory
4 | 4 | john3 | Territory
3条答案
按热度按时间n8ghc7c11#
要立即解决问题,只需执行以下步骤。它还将帮助您实现数据规范化。
1创建一个具有locaitontype name和id的新表,并按所需顺序插入位置类型。
2.将表b locationtype列数据类型更改为int。
现在将表c中的id插入表b的locationtype列。并使用下面的查询获得所需的输出。
从表\u a上的表\u b内部联接表\u a中选择表\u b.id、表\u a.emp \u id、表\u a.name、表\u c.name作为locationtype。emp \u id=table \u b.emp \u id inner join table \u c on table \u c。locationtype \u id=table \u b.locationtype按表\u c.locationtype \u id排序
smdncfj32#
你可以用
field()
把地点变成数字。您需要的是基于此订单的最小位置。您可以使用相关子查询按员工获取此信息:
从中添加额外列
a
只是一个加入谈判桌的问题。fcy6dtqo3#
使用
case when
顺序从句