如何使用列值连接表?
我有三个表,如下所示:
messages_table
-----------------------------------------------------------------------------
msg_id | msg_sub | msg_to | to_user_type | msg_from | from_user_type
-----------------------------------------------------------------------------
001 | test | 88 | manager | 42 | admin
002 | test2 | 88 | manager | 94 | manager
Run Code Online (Sandbox Code Playgroud)admin_table
-------------------------—
admin_id | admin_name
-------------------------—
001 | Super Admin
Run Code Online (Sandbox Code Playgroud)manager_table
---------------------------
manager_id | manager_name
---------------------------
88 | Mandela
94 | Kristen
Run Code Online (Sandbox Code Playgroud)如何使用SQL查询获得如下所示的所需输出.即,满足以下条件时,将关于列值的表连接:
如果user_type = admin那时它应该加入admin_table.
如果user_type = manager那时它应该加入manager_table.
期望的输出:
-----------------------------------------------------
msg_id | msg_sub | msg_to_name | msg_from_name
-----------------------------------------------------
001 | test | Mandela | Super Admin
002 | test2 | Mandela | Kristen
Run Code Online (Sandbox Code Playgroud)
即根据列值获取join sql查询.
编辑:
我想从sql查询中获取数据而不是从服务器端编码.
我从这里尝试了这个查询,即Winfred的想法(已回答)
但是,我无法理解.
msg_by_usertype是基于列的,manager然后它应该选择的值manager_table,如果它是管理员admin_table
据我了解你的问题,你可以试试这个:
SELECT msg_id,
msg_body,
usersBy.userName AS msg_by,
usersTo.userName AS msg_to,
msg_by_usertype
FROM messages
INNER JOIN
(SELECT admin_id As id, admin_name as userName
FROM admin_table
UNION
SELECT manager_id As id, manager_name as userName
FROM manager_table ) usersTo ON msg_to = usersTo.id
INNER JOIN
(SELECT admin_id As id, admin_name as userName
FROM admin_table
UNION
SELECT manager_id As id, manager_name as userName
FROM manager_table ) usersBy ON msg_by = usersBy.id
Run Code Online (Sandbox Code Playgroud)
这是一个SQL小提琴,看看它是如何工作的.(它只适用于你不能拥有像经理一样具有相同身份的管理员.在两个表中,Id应该是唯一的.)