Как создать эту запись? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть таблица с сотрудниками, структурированная как:

tblEmployees
+--------------+------------+-----------+-------+
| EmployeeID   |  FirstName |  LastName |  Wage |
+--------------+------------+-----------+-------+

У меня есть таблица, в которую пользователь может вставлять данные из внешнего программного обеспечения, которая выглядит следующим образом:

tblImport
+------------+-----------+--------------+
| EmployeeID |  WorkDate |  HoursWorked |
+------------+-----------+--------------+

Это затем перейдет в другую таблицу (HoursWorkedRecords), которая структурирована таким же образом.

Когда я добавляю таблицу импорта в основную таблицу, я хотел бы сначала:

  • Добавление для проверки того, существует ли EmployeeID, вставленный в таблицу tblImport, в tblEmployees, если это так, то оно добавляется к HoursWorkedRecords.

  • Перед импортом чека нет дублирующих записей по EmployeeID по данному WorkDate.

Мой вопрос, как я могудостичь этого?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Ответ на ваш вопрос зависит от того, как вы хотите действовать, если любое из ваших требований не будет выполнено:

  • Что должно произойти, если EmployeeID равно , а не найдены в таблице tblEmployees?
  • Что должно произойти, если в таблице HoursWorkedRecords найдены дубликаты ?

Если ответ на эти вопросы заключается в простом игнорировании записей, которыене соответствует критериям, тогда это может быть достигнуто с помощью относительно простого INSERT запроса:

insert into hoursworkedrecords
select 
    i.employeeid, i.workdate, i.hoursworked
from 
    (tblimport i inner join tblemployees e on i.employeeid = e.employeeid) 
    left join hoursworkedrecords h on i.employeeid = h.employeeid and i.workdate = h.workdate
where 
    h.employeeid is null

Здесь inner join в таблице tblEmployees гарантирует, что EmployeeID является действительным, иleft join в таблице hoursworkedrecords в сочетании с критериями is null гарантирует, что записи для этого сотрудника на эту дату не существует.

Если, однако, пользователь должен быть предупрежден об этих проблемах,Вы должны использовать обратный запрос, указанный выше, чтобы выбрать недействительные записи, которые пользователь должен просмотреть, прежде чем продолжить.

0 голосов
/ 04 марта 2019

Вы можете использовать запрос для этого.Если вы используете LEFT JOIN между HoursWorkedRecords и tblEmployees на EmployeeID, то любые пустые записи в вашей таблице сотрудников будут означать записи рабочего времени, в которых сотрудник не может быть найден.Вы можете использовать этот запрос напрямую или через модуль VBA.

(непроверенный) SQL для запроса:

SELECT
    HWR.EmployeeID
FROM HoursWorkedRecords AS HWR
    JOIN tblEmployees AS TE
    ON HWR.EmployeeID  = TE.EmployeeID 
WHERE
    TE.EmployeeID IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...