首页 > 解决方案 > 一次从 2 个 mysql 表中获取信息

问题描述

所以我是 MYSQL 的新手,遇到了一个重大问题(至少对我来说)我有 2 个表 cwd_user 和 cwd_membership 我想从我的数据库中获取自 2020 年 8 月 31 日以来未登录的所有用户以及特定群体的一部分。

我想出的第一个查询是这样的:

SELECT u.user_name as "Username"
     , u.display_name as "Full Name"
     , to_timestamp(CAST(a.attribute_value as bigint)/1000) as "Last Login" 
  FROM cwd_user u
  LEFT 
  JOIN cwd_user_attributes a 
    ON u.id = a.user_id 
   AND attribute_name = 'login.lastLoginMillis' 
 WHERE a.attribute_value >= '1598824800000' 
    OR a.attribute_value IS NULL
 ORDER 
    BY a.attribute_value;

我怎样才能同时从第二个表中获取信息?

表格如下所示:

cwd_membership:

id   |  parent_name   |   child_name
1    | finance        | tomi
2    | hr             | stro
3    | hr             | sujo

cwd_user:

id   |  user_name    | display_name |I dunno which fields the query I found only gets the "Last Login" from
1     | tomi          | Todd Miller  |?
2     | stro          | Steve Rogers |?
3     | sujo          | Susan Jones  |?

查询给了我用户名,例如。tomi 和 stro 他们的全名和他们最后一次登录的时间是这样的:

Username | Full Name   | Last Login
tomi     | Tdd Miller  | July 1st 2020
stro     | Steve Rogers| June 1st 2020
sujo     | Susan Jones | April 1st

不过,我希望显示的只是那些属于“hr”组的人,而不是其他人。

我希望我能表达我的观点,有人可以帮助我。

标签: mysql

解决方案


与加入查询的方式大致相同cwd_attributes,您也可以加入,cwd_membership然后检查加入的数据是否符合您的条件。

您的查询带有额外的JOIN

SELECT u.user_name as "Username"
     , u.display_name as "Full Name"
     , to_timestamp(CAST(a.attribute_value as bigint)/1000) as "Last Login" 
  FROM cwd_user u
  INNER JOIN cwd_membership m
    ON m.child_name=u.user_name
    AND m.parent_name='hr'
  LEFT JOIN cwd_user_attributes a 
    ON u.id = a.user_id
    AND attribute_name = 'login.lastLoginMillis' 
 WHERE
    a.attribute_value >= '1598824800000' OR a.attribute_value IS NULL
 ORDER 
    BY a.attribute_value;

推荐阅读