繁体   English   中英

使用列值获取表连接

get table join with column value

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

如何使用列值连接表?

我有三个表,如下所示:

  • 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 
  • admin_table

     -------------------------— admin_id | admin_name -------------------------— 001 | Super Admin 
  • manager_table

     --------------------------- manager_id | manager_name --------------------------- 88 | Mandela 94 | Kristen 

如何使用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

即根据列值获取join sql查询。


编辑:

我想从sql查询中获取数据而不是从服务器端编码。

我从这里尝试了这个查询,即Winfred的想法(已回答)

但是,我无法理解。

msg_by_usertype是基于列的,值manager然后应该选择manager_table ,如果是admin,则选择admin_table

3 个回复

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

    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  

这是一个SQL小提琴 ,看看它是如何工作的。 (它只有在你不能拥有像经理一样具有相同身份的管理员时才有效。在两个表中,Id应该是唯一的。)

请使用以下SQL

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,'admin' as usertype
      FROM admin_table         
     UNION         
     SELECT manager_id As id, manager_name as userName,'manager' as usertype
      FROM manager_table ) usersTo 
      ON msg_to = usersTo.id  and  msg_by_usertype = usersTo.usertype 

如果我理解你的问题,你想要这样的结果吗?

MSG_ID      MSG_BODY    MSG_TO      BY           MSG_BY_USERTYPE 
----------  ----------  ----------  -----------  --------------- 
001         test        adm1        managone     manager         
002         sadff       adm1        adm3?        admin   

如果是这样,你可以使用它

SELECT MSG_ID, MSG_BODY, MSG_TO,                                        
     CASE                                                               
         WHEN MSG_BY_USERTYPE = 'admin' THEN COALESCE(                  
              (SELECT ADMIN_NAME FROM ADMIN_TABLE                       
               WHERE  MSG_BY = ADMIN_ID), RTRIM(MSG_BY) CONCAT '?')     
         WHEN MSG_BY_USERTYPE = 'manager' THEN COALESCE(                
              (SELECT MANAGER_NAME FROM MANAGER_TABLE                   
               WHERE  MSG_BY = MANAGER_ID), RTRIM(MSG_BY) CONCAT '?')   
         ELSE ' '                                                       
     END AS BY,                                                         
 MSG_BY_USERTYPE                                                        
 FROM MESSAGES 
3 表联接列名到列值

我已经看到了许多相似的问题,但是我似乎找不到与我需要做的事情相匹配的问题。 我有以下2表: 表1(ambro_awards_categories): 和表2(ambro_awards): 我想做的事情(我完全接受,在那里可能有更好的方法)是将所有内容合并到1个大表中, ...

2015-01-19 03:44:47 1 46   mysql
5 使用列值作为表名连接表

是否可以加入表名是列中的值的表? 这是一个名为food的TABLE : 还有其他三个表(表定价): daily_price , weekly_price和monthly_price表。 旁注:尽管名称不同,但三个定价表显示的信息种类却大不相同,这就是为什么三张表没有合并为一张表的原因 fo ...

6 使用联接并在表中更新来计算列值

我有两个表,即foo和bar 我想使用上述计算方法更新表栏并将其连接到栏表中以实现结果, bar的 colC和foo中的col4经常使用join我应该如何使用。任何帮助将不胜感激。 所以我得到的酒吧桌会像 ...

7 postgres:由未知表左联接-列值

我知道这是一个愚蠢的问题,但我得问一下。 我正在使用的数据库与另一个表没有“向后”关系。 假设我有三个表-称它们为类型表rt , wt和ret 。 这些表中的每个表都有一个group_id。 每个group表的type都可以包含rt,wt或ret。 正常的选择过程是 ...

8 如何基于表中的列值联接表

我有一个表格news_feed ,其中将存储我所有不同类型的活动数据,例如管理员活动,用户活动,公司活动等。该表格格式如下: 假设一个ID为1的用户喜欢ID为2的公司,那么该记录将像 我将它们列出在我的模块中,列出的内容很完美。 但是,假设公司ID 2不存在或处于非活动状态,则 ...

9 根据SQL Server中的列值联接表

项目表 杂项表: 药桌: 我有这个表结构; 我的主表是Item表,我想基于主表中的列值将主表与其他表联接。 确定要联接的表的列是code 。 如果代码为misc与misc table连接;如果值为med与medicine table 。 我知道像表的基本JOI ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM