Mysql 行值是第二个表的列名,需要第二个表的结果
我需要从两个表中创建一个视图 表1Mysql 行值是第二个表的列名,需要第二个表的结果,mysql,Mysql,我需要从两个表中创建一个视图 表1 app_id cat_id approver level proj_id 1 1 pm_id 1 731 1 2 dm_id 2 843 1 3 dm_id 1 859 2 4 bo_id 1 859
app_id cat_id approver level proj_id
1 1 pm_id 1 731
1 2 dm_id 2 843
1 3 dm_id 1 859
2 4 bo_id 1 859
表2
proj_id pm_id dm_id bo_id
731 100102 100034 100121
843 123121 145721 104321
859 112312 132434 132435
我的审批人id在表2中,表1表示根据级别谁是项目的审批人。我想为pm、dm和bo的待批准列表创建一个视图
e、 g.结果表
app_id cat_id approver
1 1 100102
1 2 145721
1 3 132434
2 4 132435
使用leftjoin将两个表连接在一起,然后使用case何时获得批准者
select
table1.app_id,
table1.cat_id,
case when table1.approver = 'pm_id' then table2.pm_id
when table1.approver = 'dm_id' then table2.dm_id
when table1.approver = 'bo_id' then table2.bo_id
end as approver
from table1
left join table2 on table1.proj_id = table2.proj_id
请参阅rextester中的
编辑:
如果您有动态审批人,请尝试以下操作:
SET @sql = NULL;
SELECT
CONCAT('CASE', GROUP_CONCAT(DISTINCT
CONCAT(' WHEN table1.approver = ''',
approver,
''' THEN table2.', approver) SEPARATOR ' '), ' END AS approver'
) INTO @sql
FROM table1;
SET @sql = CONCAT('SELECT table1.app_id, table1.cat_id, ', @sql, ' FROM table1 LEFT JOIN table2 ON table1.proj_id = table2.proj_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
还有一个内置测试仪
创建视图:
内部连接选择table1.app_id,table1.cat_id,table2.pm_id作为审批人,从table1.proj_id=table2.proj_id中选择table1.app_id,table1.cat_id,table2.pm_id作为审批人。下面是一些堆栈溢出文档抱歉@dragandrop,如果是这样的话,我就不会在这个论坛上提问了。我只是不需要pm_id,我需要表2中的列值,其中的列名值来自表1。请检查结果表如果表1中有10个不同的批准人,我应该写10个不同的案例吗?我认为是的。然而,如果您确实有超过10个不同的审批人,那么在表2中应该有相应的列,这是您的表的设计吗?如果是,动态sql将解决太多不同的情况@用户2483712是。你是对的,目前至少有6个级别的im\u id、pm\u id、dm\u id、bo\u id、hr\u id和am\u id。他们可以增加这些。我需要表2中的列值,其中的列名值来自表1。请检查结果table@user2483712检查编辑部分。非常感谢您的选择,有一个问题我可以在单个查询中执行此操作,因为我需要将其创建为视图而不是存储过程?
create view view1
as
select
table1.app_id,
table1.cat_id,
case when table1.approver = 'pm_id' then table2.pm_id
when table1.approver = 'dm_id' then table2.dm_id
when table1.approver = 'bo_id' then table2.bo_id
end as approver
from table1
left join table2 on table1.proj_id = table2.proj_id