2011-06-08 79 views
2

我有一個現有的Access數據庫,其中包含員工的培訓記錄。如果一名員工已經接受培訓或被安排接受培訓,則在鏈接表中會有記錄。如果沒有,則沒有記錄。我想查詢所有未接受過培訓的員工,但沒有任何記錄。需要幫助奇數訪問查詢

數據庫就像如下:

Table: Trainings 
TrainingID AutoNumber 
Description Text 
... 

Table: EmployeeTrainings 
EmployeeTrainingID  AutoNumber 
TrainingID    Number 
EmployeeID    Number 
ScheduledDate   Date/Time 
... 

Table: Employees 
EmployeeID  Number 
FullName   Text 
... 

我想導致像以下誰是不是在給定的訓練培訓的員工以下領域:

Trainings.Description,Employees.FullName,EMployeeTrainings .ScheduledDate

我該如何做到這一點?我需要一些指導。

回答

2

我認爲這應該會給你...但是,因爲他們不會被訓練,我們不能爲他們補上訓練日期,因此我只包括了兩列...

select 
     t.Description, 
     emp.FullName, 
     et.ScheduledDate 
    from 
     trainings t 
     join employees emp 
      left join EmployeeTrainings et 
       on emp.EmployeeID = et.EmployeeID 
       AND et.TrainingID = t.TrainingID 
    where 
     t.TrainingID IN (1, 3) 
    order by 
     t.Description, 
     emp.FullName 

這應該讓你得到你想要的...通過執行LEFT JOIN,它會將連接左側的所有條目與記錄返回到右表。如果在右側沒有這樣的記錄(因此從未安排過的員工),他們的預定日期值將作爲NULL發佈......對於那些DID找到合適匹配的記錄,將在結果集中包含他們的日期。對IN子句中的「Access」語法不是肯定的......但它應該像在其他SQL引擎中那樣工作。

+0

您沒有看到與現有計劃日期相匹配的方式並將其他計劃留爲空白? – MAW74656 2011-06-08 16:52:05

+0

@ MAW74656,請參閱修訂後的答案 – DRapp 2011-06-08 17:10:38

+0

好的,我想我明白這一點。是否可以通過多種培訓來做到這一點?即給我所有未接受過培訓1或3培訓的員工? – MAW74656 2011-06-08 17:15:16