在mysql中从多个表获取值

在mysql中从多个表获取值,mysql,Mysql,我有三张桌子 用户表: SELECT leave_type.leave_name, users.user_name as applied_by, leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, leaves.leave_status from leaves join leave_type on leaves.leave_type = leave_type.id join users on leaves.applie

我有三张桌子

用户表:

SELECT leave_type.leave_name, users.user_name as applied_by, 
leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users on leaves.applied_by = users.id 
 SELECT leave_type.leave_name, users.user_name as applied_by, 
    leaves.approved_by, leaves.no_of_days, leaves.leave_date, 
    leaves.leave_upto_date, leaves.leave_status, leaves.approved_on
    FROM leave_type, leaves, users  
    WHERE leave_type.id = leaves.leave_type 
    AND leaves.applied_by = users.id 
  • 用户id
  • 用户名
离开类型:

SELECT leave_type.leave_name, users.user_name as applied_by, 
leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users on leaves.applied_by = users.id 
 SELECT leave_type.leave_name, users.user_name as applied_by, 
    leaves.approved_by, leaves.no_of_days, leaves.leave_date, 
    leaves.leave_upto_date, leaves.leave_status, leaves.approved_on
    FROM leave_type, leaves, users  
    WHERE leave_type.id = leaves.leave_type 
    AND leaves.applied_by = users.id 
  • 留名
  • 留下你的名字
离开

  • 身份证
  • 留名
  • 应用者(用户id)
  • 批准人(用户id)
我的最终结果应该是

结果:

SELECT leave_type.leave_name, users.user_name as applied_by, 
leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users on leaves.applied_by = users.id 
 SELECT leave_type.leave_name, users.user_name as applied_by, 
    leaves.approved_by, leaves.no_of_days, leaves.leave_date, 
    leaves.leave_upto_date, leaves.leave_status, leaves.approved_on
    FROM leave_type, leaves, users  
    WHERE leave_type.id = leaves.leave_type 
    AND leaves.applied_by = users.id 
  • 留下你的名字
  • 应用者(用户名)
  • 批准人(用户名)
这就是我一直在尝试和坚持的。很抱歉,我没有提供我第一次发布此问题时尝试的内容

选项1:

SELECT leave_type.leave_name, users.user_name as applied_by, 
leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users on leaves.applied_by = users.id 
 SELECT leave_type.leave_name, users.user_name as applied_by, 
    leaves.approved_by, leaves.no_of_days, leaves.leave_date, 
    leaves.leave_upto_date, leaves.leave_status, leaves.approved_on
    FROM leave_type, leaves, users  
    WHERE leave_type.id = leaves.leave_type 
    AND leaves.applied_by = users.id 
选项2:

SELECT leave_type.leave_name, users.user_name as applied_by, 
leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users on leaves.applied_by = users.id 
 SELECT leave_type.leave_name, users.user_name as applied_by, 
    leaves.approved_by, leaves.no_of_days, leaves.leave_date, 
    leaves.leave_upto_date, leaves.leave_status, leaves.approved_on
    FROM leave_type, leaves, users  
    WHERE leave_type.id = leaves.leave_type 
    AND leaves.applied_by = users.id 

另外,我是MySQL新手&我不知道如何实现这一点。

如果需要两次加入同一个表,可以为它提供一个别名

在本例中,用户表已使用两个不同的别名联接。我用大写字母做了别名,所以很容易找到它们,但当然,你可以随心所欲地写

SELECT 
  leave_type.leave_name, 
  APPLY_USER.user_name as applied_by, 
  APPROVE_USER.user_name as approved_by, 
  leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
  leaves.leave_status 
from leaves
join leave_type on leaves.leave_type = leave_type.id
join users AS APPLY_USER on leaves.applied_by = APPLY_USER.id 
join users AS APPROVE_USER on leaves.applied_by = APPROVE_USER.id 

我通过以下查询获得了您想要的结果。我不太确定这是不是最好的方法

SELECT leave_type.leave_name, users.user_name AS applied_by, 
    (SELECT user_name FROM users WHERE id = leaves.approved_by) AS approved_by, 
    leaves.no_of_days, leaves.leave_date, leaves.leave_upto_date, 
    leaves.leave_status 
    FROM leaves
    JOIN leave_type on leaves.leave_type = leave_type.id
    JOIN users on leaves.applied_by = users.id;

“这就是我想到的,但是”-但是什么?那么,当你运行这些选项时发生了什么。有什么错误,意外的结果吗?那怎么办呢?“帮助我们”“帮助您。@GolezTrol我得到了所需的结果,但只剩下一列。approved_by保持id,我无法从users表中获取名称,因此您需要获取申请用户和批准用户的用户名。把这一点加到问题上。这是相关信息。没有它,你的问题太不清楚,无法回答。