ACCESS SQL:如何在没有数据与另一个表连接的情况下检索表的所有数据

ACCESS SQL:如何在没有数据与另一个表连接的情况下检索表的所有数据,sql,ms-access,Sql,Ms Access,我有一个工作SQL语句,用于计算工资和计算工作日数,这里的一位SO成员会帮我解决这个问题。然而,问题是结果出来的只是在那个时期工作过的劳动力。我真正想要的是,结果必须显示tbl_劳动力中的所有劳动力,无论他是否在该时期工作过 select lab.lb_name, max(days), sum(prod.pdtn_qty * pdWk.pd_cost / 12) as Total from tbl_labor as lab, tbl_production as prod,

我有一个工作SQL语句,用于计算工资和计算工作日数,这里的一位SO成员会帮我解决这个问题。然而,问题是结果出来的只是在那个时期工作过的劳动力。我真正想要的是,结果必须显示tbl_劳动力中的所有劳动力,无论他是否在该时期工作过

select
  lab.lb_name,
  max(days),
  sum(prod.pdtn_qty * pdWk.pd_cost / 12) as Total 
from
  tbl_labor as lab,
  tbl_production as prod,
  tbl_pdWk_process as pdwk,

(select pdn2.lb_id, count(pdn2.lb_id) as days from
  (select  lb_id
  from tbl_production  pdn1
  where pdn1.pdtn_date >= #9/5/2012#
  and   pdn1.pdtn_date <= #2012-09-20#
  group by lb_id, pdtn_date ) as pdn2
     group by pdn2.lb_id) as pdn3

where prod.pdtn_date >= #9/5/2012#
and   prod.pdtn_date <= #2012-09-20#
and prod.lb_id = lab.lb_id
and   prod.pd_making_id = pdwk.pd_making_id
and lab.lb_id = pdn3.lb_id
group by lab.lb_name

替换旧样式的联接

from
  tbl_labor as lab,
  tbl_production as prod,
...
where 
  lab.fld1 = prod.fld1
使用较新的左连接

from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.fld1 = prod.fld1
...
from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.lb_id = prod.lb_id
...
编辑: 在原始代码中

from
  tbl_labor as lab,
  tbl_production as prod
...
where ...
prod.lb_id = lab.lb_id
...
在tbl_生产表和tbl_人工表之间创建内部联接。 它需要替换为较新样式的左连接

from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.fld1 = prod.fld1
...
from
  tbl_labor as lab
  LEFT JOIN tbl_production as prod ON lab.lb_id = prod.lb_id
...

您可以在

上阅读有关SQL联接的内容,请详细说明一下好吗?以我有限的SQL技能,我无法理解您的意思,尤其是lab.fld1=prod.fld1您所指的字段是什么?因为在我的陈述中没有这样的项目。实际上,我确实理解左连接的基本原理。然而,对于这个SQL语句,我对您给出的答案感到非常困惑。因为pdn1.pdtn_date>=9/5/2012还有其他条件。。。和其他表TBLYPDWKY过程,是交叉的中间陈述,你没有提到。我真的不知道该把它放在哪里。实际上,我可以在给定的时间段内创建不同生产日期的计数。我可以把工资加起来。但我只能在单独的sql中完成。当像这样组合起来时,这超出了我的能力。其他条件将保持不变,因为它们与连接无关,它们是基本的选择标准。仅在代码中,prod.lb_id=lab.lb_id和prod.pd_making_id=pdwk.pd_making_id和lab.lb_id=pdn3.lb_id是连接相关的。但是您可能需要在where子句中添加一个额外的条件,而不是上面提到的移动到联接的条件。条件为或prod.pdtn_日期为空。尝试找出您可能需要它的原因。+1这是在MS Access中构建的,查询设计窗口应允许OP通过点击构建合适的查询。例如,若要添加联接,可以将字段从一个表拖到另一个表;若要更改联接类型,可以右键单击链接并从可用选项中选择。然后,您可以在“设计”窗口的“SQL”视图中查看SQL。@Remou感谢您为我提供指导。事实上,这一直是我创建简单SQL的方式。然而,当谈到这个复杂的陈述时,我似乎不知所措。但正是您的回复提醒了我如何将现有声明更改为Germann用这种方法建议我的声明: