-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フィールドの値を超えないようにする必要があることを除いて、機能します。

たとえば、従業員テーブルには 200 人の正規従業員と 100 人の正規従業員がいますが、トレーニング テーブルに指定されているように、35 人の特別従業員と 5 人の正規従業員だけを挿入する必要があります。

HAVING を試しましたが、不明なエラー列がスローされ続けます。助けてください。1 つのタイプの従業員を挿入しようとしましたが、それでも機能しません

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 を投稿できません。

4

2 に答える 2

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 )
于 2013-04-11T01:41:48.053 に答える
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

編集: Michael Benjamin's answer で指摘されているように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)
于 2013-04-11T01:08:54.453 に答える