2013-04-10 182 views
-2
**Employee** 

PK empId 
firstName 
lastName 
isRegularEmp 


**Employee_Training** 

PK FK empId 
PK FK trainingId 
logId 


**Training** 

PK TrainingId 
date 
specialEmployeesNeeded 
regularEmployeesNeeded 
FK roomId 

我試圖通過特定日期將所有員工插入到employee_training表中。它的工作原理除了我需要的金額不超過SpecialEmployees/Regular Employees字段值。Mysql插入記錄從表A到表B.如果表B.列少於

例如,我在員工表中有200名普通員工和100名普通員工,但我只需要35名特殊員工和5名特殊員工按照培訓表中的規定插入。

我試過HAVING,但它一直拋出一個錯誤未知列。請幫助,我嘗試插入一種類型的員工,但它仍然不起作用

INSERT INTO EMPLOYEE_TRAINING(empId, trainingId) 


SELECT E.empId , T.TrainingId 


FROM EMPLOYEE E, TRAINING T 

WHERE T.`date` = "2013-4-20" 

AND E.isRegularEmp = false 

HAVING COUNT(E.empId) <= regularEmployeesNeeded 

我無法發佈我的erd,因爲我沒有足夠的積分。所以請裸露我

+1

請把你的嘗試,以及一些示例數據將是不錯... – 2013-04-11 00:00:19

+0

爲什麼你們都記下問題,而我還沒有得到編輯自己的帖子正確 – Marc 2013-04-11 00:13:49

回答

0

您的isRegularEmp條件的位置不正確。它應該放在WHERE條款中。

INSERT INTO EMPLOYEE_TRAINING(empId, trainingId) 

SELECT E.empId , T.TrainingId 

FROM EMPLOYEE E, TRAINING T 

WHERE T.`date` = "2013-4-20" 

AND E.isRegularEmp = false 

HAVING COUNT(E.empId) <= regularEmployees 

編輯:正如邁克爾·本傑明的答覆中指出,regularEmployees不是現場沒有定義。您需要SELECT正規僱員的COUNT

INSERT INTO EMPLOYEE_TRAINING(empId, trainingId) 

SELECT E.empId , T.TrainingId 

FROM EMPLOYEE E, TRAINING T 

WHERE T.`date` = "2013-4-20" 

AND E.isRegularEmp = false 

HAVING COUNT(E.empId) <= (SELECT COUNT(*) FROM EMPLOYEE WHERE isRegularEmp = true) 
+0

對不起,這是一個錯字的機會。然而,它表示在'having子句'中的未知列'regularEmployees' – Marc 2013-04-11 01:19:53

1

regularEmployees是不是在你的任何表的列,也不是在查詢的任何地方定義。嘗試

INSERT INTO EMPLOYEE_TRAINING(empId, trainingId) 

SELECT E.empId , T.TrainingId 

FROM EMPLOYEE E, TRAINING T 

WHERE T.`date` = "2013-4-20" 

AND E.isRegularEmp = false 

HAVING COUNT(E.empId) <= (select count(*) from EMPLOYEE where isRegularEmp=true) 
+0

感謝您的更正,但是我需要插入它不超過訓練表中指定值的點。所以查詢仍然不能正常工作 – Marc 2013-04-11 02:01:18

相關問題