使用列值获取表连接

Raf*_*fee 6 sql join

如何使用列值连接表?

我有三个表,如下所示:

  • 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查询获得如下所示的所需输出.即,满足以下条件时,将关于列值的表连接:

  1. 如果user_type = admin那时它应该加入admin_table.

  2. 如果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

And*_*ttó 5

据我了解你的问题,你可以试试这个:

    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应该是唯一的.)