我在Ms Access中有2个表
我想显示员工表中与员工薪资表关联的所有员工 要链接两个表,两个表中的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
如何重写我的查询以避免重复,或者什么是不同的方式来显示重复?
答案 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运算符只会返回唯一的返回结果。