• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Выборка несуществующих записей из таблицы

  • Автор темы Jas
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

Jas

Вот какая тема.... Есть две таблицы, в первой содержаться код карты работника и ФИО. Во второй содержеться ряд событий. Систематакая когда человек проходит он карточку проносит перед сканером, сканер считывает код карты, время, дату и событие двери (вход или выход). Все эти события заносятся во вторую таблицу. Задача такая вычислить кто не пришел на работу допустим за неделю. Я чтото смутно представляю как это сделать. Пробовал через обычный запрос, но ничего не получается так как если работнк не приходил то и событий не было. Может у кого появиться мысль, помогите пожалуйста.
 
B

Barmutik

Ну так в чём проблема .. если в лоб ... делайте запрос из первой таблицы а в условие подзапрос ко второй таблице с налаганием условий на дату и т.д. и потом проверка подзапроса на количестве записей в нём равном 0.

Что-то а ля такого:

Код:
SELECT * FROM Persons P WHERE (SELECT COUNT(*) FROM Times T WHERE T.P_ID = P.P_ID AND Ваши доп условия по датам и т.д) = 0

Связка таблицы по ключу и условие по дате ... вариант не самый быстрый но работаеть будет...
 
J

Jas

Чтото у меня ниче не полчуается по тому алгоритму который Вы посоветовали. может можно выложить куда нибудь БД. А Вы тогда посмотрите, что я там не так делал. Или может я что не так объсянил. Но пока ниче не работает. Помогите пожалуйста.
 
B

Barmutik

Ну выложите структуры таблиц .. странно что не работает ...
 
J

Jas

1 таблица
iSlotNumber числовой (код работника)
tEmpName текстовый (ФИО работника)

2 таблица
dEvent_Date Дата/время
dEvent_Time Дата/время
tEvent_Emp_Code_Num числовой (код работника)
tEvent_Type_Desc текст (событие двери (Вход или выход))
 
B

Barmutik

Код:
SELECT * FROM Table1 T1 WHERE (SELECT COUNT(*) FROM Table2 T2 WHERE T1.iSlotNumber = T2.tEvent_Emp_Code_Num AND T2.dEvent_Date >= StartDate AND T2.dEvent_Date <= EndDate) = 0

Покажет список кого не было в интервале между StartDate and EndDate ... вместо них соответственно подставлять нужные Вам значения ...

Не совсем понятно зачем хранить дату и время двумя полями ?
 
J

Jas

структура была уже готовая. поэтому не могу ответить на ваш вопрос. тут еше проблема в том что отчет должен выводиться в формате типо такого:
ФИО Дата отсутвия

Вот как установить дату когда человек отсутвоал?
 
B

Barmutik

Ааа.. это совсем другая задача ... какой раз убеждаюсь что надо уметь правильно спрашивать....в решении такой задачи одним ANSI SQL не обойдётесь.. или нужно использовать дополнительную таблицу с датами для подзапроса...
 
J

Jas

Тоесть вы хотите сказать что придеться всетаки писать циклический алгоритм. Но я просто что то смутно себе представляю каким образом я буду фиксировать даты в которые отсутсвовал тот или иной сотрудник.
 
B

Barmutik

Ну одним запросом врядли получится без использования подручных средств .. как вариант создать таблицу со всеми днями(датами).. и потом делать подзапрос к этой таблице для поиска пропусков в основной таблице с датами...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!