如何使用ms访问查询从两个表中获取记录

时间:2013-12-12 10:12:06

标签: sql ms-access

我在Ms Access中有2个表

  1. tbl_Master_Employess
  2. tbl_Emp_Salary
  3. 我想显示员工表中与员工薪资表关联的所有员工 要链接两个表,两个表中的id是coluqEmpID

    在第二个表格中,我有一个日期列。我需要一个查询,它应该使用特定日期从两个表中获取记录

    我尝试了以下查询:

    select coluqEID as EmployeeID , colEName as EmployeeName,"" as Type, "" as Amt
    from tbl_Master_Employee 
    union Select  b.coluqEID as EmployeeID, b.colEName  as EmployeeName, colType as Type, colAmount as Amt 
          from tbl_Emp_Salary a, tbl_Master_Employee b  
          where a.coluqEID = b.coluqEID and a.colDate = #12/09/2013# 
    

    但是,它显示重复。

    Query4

    EmployeeID  EmployeeName    Type    Amt
    1           LAKSHMANAN      
    1           LAKSHMANAN      Advance 100
    2           PONRAJ      
    2           PONRAJ          Advance 200
    3           VIJAYAN     
    4           THIRUPATHI      
    5           VIJAYAKUMAR     
    6           GOVINDAN        
    7           TAMILMANI       
    8           SELVAM      
    9           ANAMALAI        
    10          KUMARAN 
    

    如何重写我的查询以避免重复,或者什么是不同的方式来显示重复?

2 个答案:

答案 0 :(得分:0)

您的查询的问题是,当您想要的是一个连接时,您正在使用union。工会首先要列出所有员工的第一部分:

select coluqEID as EmployeeID , colEName as EmployeeName,"" as Type, "" as Amt from tbl_Master_Employee

然后将所有员工记录添加到该列表中,其中他们的工资具有特定日期。

Select  b.coluqEID as EmployeeID, b.colEName  as EmployeeName, colType as Type, 
colAmount as Amt 
from tbl_Emp_Salary a, tbl_Master_Employee b  
where a.coluqEID = b.coluqEID and a.colDate = #12/09/2013#

您的目标是获取所有员工的列表,并仅显示具有特定日期的员工的薪资信息吗?一些样本数据会很有用。假设此处的数据:SQL Fiddle此查询应该创建您想要的内容。

Select a.coluqEID as EmployeeID, colEName as EmployeeName, 
       b.colType as Type, b.colAmount as Amt
FROM tbl_Master_Employees as a 
LEFT JOIN (select coluqEID, colType, colAmount FROM tbl_EMP_Salary 
           where colDate = '20130912') as b ON a.coluqEID = b.coluqEID;

第一步是创建一个选项,它可以让您获得日期所需的工资。然后,您可以在此处执行连接,就像执行单独的查询一样。您使用LEFT JOIN是因为您希望来自一方的所有记录,员工以及只有符合您的标准的记录来自第二方,即您的工资。

答案 1 :(得分:0)

我相信您需要加入,但是关于唯一名称的问题。

select **DISTINCT** coluqEID as EmployeeID 

添加distinct运算符只会返回唯一的返回结果。