SQL Server 查询一个表中的所有活动雇员,并查看他们在另一个表中是否有数据?[已关闭]

jhdbpxl9  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(114)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

5天前关闭。
Improve this question
我试图在两个表之间进行查询,这样我就可以从一个表中获取所有活动雇员,而如果雇员是从另一个表中签名的,则可以从表单中获取所有雇员。

Example:

Table 1                                       Table 2
select * from tblEmpl                         select * from tblSign 

select tblSign.sigdate,tblSign.sigtime,tblSign.sigact,tblSign.esignature,tblEmpl.fname,tblEmpl.lname,tblEmpl.location,tblEmpl.estatus,tblLocs.unit,tblLocs.descript,TblLocs.addr1,tblLocs.city,tblLocs.state,tblLocs.zip from tblSign left join tblEmpl on tblSign.eight_id = tblEmpl.eight_id left join tblLocs on tblEmpl.location=tblLocs.location where tblSign.formid='9648' and tblSign.sigact <> 'O' and tblEmpl.estatus='A' and tblEmpl.location='013' and tblSign.sigdate>='2022-11-01' order by tblSign.sigdate asc;

我使用了这个查询,但它只得到了所有签署表单的活动员工,而不是所有活动员工,如果他们签署了,还需要额外的列。

sigdate                    sigtime      sigact  fname  lname      
2022-11-01 00:00:00      3:16:35 PM      A      EMORY CORTEZ
igetnqfo

igetnqfo1#

您当前查询保留从tblSign到tblEmpl连接-即从tblSign获取所有记录,从tblEmpl获取匹配记录,从你的问题听起来你实际上想把它颠倒过来(即,获取与特定条件匹配的所有tblEmpl记录以及来自tblSign的任何匹配记录)。您还可以在WHERE子句中使用筛选器,根据来自tblSign的特定条件筛选集合-假定您将“t对于来自tblEmpl的每个结果都没有匹配的tblSign记录,则这些过滤器基本上会将最终结果集修剪为仅具有tblSign中的那些值的记录。
要解决这个问题,请反转连接条件并将tblSign过滤器向上推到连接条件中,如下所示:

SELECT tblSign.sigdate,
       tblSign.sigtime,
       tblSign.sigact,
       tblSign.esignature,
       tblEmpl.fname,
       tblEmpl.lname,
       tblEmpl.location,
       tblEmpl.estatus,
       tblLocs.unit,
       tblLocs.descript,
       TblLocs.addr1,
       tblLocs.city,
       tblLocs.state,
       tblLocs.zip
FROM tblEmpl
LEFT JOIN tblSign
ON tblSign.eight_id = tblEmpl.eight_id
    AND tblSign.formid = '9648'
    AND tblSign.sigact <> 'O'
    AND tblSign.sigdate >= '2022-11-01'
LEFT JOIN tblLocs
ON tblEmpl.location = tblLocs.location
WHERE tblEmpl.estatus = 'A'
    AND tblEmpl.location = '013'
ORDER BY
    tblSign.sigdate ASC;

需要注意的其他事项:

  • 假设您有tblEmpl记录,而这些记录在tblSign中没有匹配项,那么您的orderby子句将对NULL一起排序。如果这是您想要的,那么您很好--如果您想区别对待它们,那么您需要修改您的ORDER BY来实现这一点(例如,可能使用coalesce或类似的方法)
  • 如果您在tblSign中有多个给定雇员的记录,则您将在结果集中获得同一tblEmpl记录的多个记录

相关问题