Последние записи
- Дата и время изменения файла
- Правильно объединить ячейки построчно в Microsoft Office Excel
- Пример проигрывания музыки по нотам на бат-файлах (через powershell)
- Ограничение логина при регистрации символами AZ-az, А-Я, а-я и цифры
- Взвешивание любого груза на весах
- CMD/BAT: звуки (2 разных + бонус: сигнал SOS)
- CMD/BAT: Управляющие последовательности ANSI/ECMA-48
- Передать фокус элементу до отображения формы по ShowModal
- Быстрое заполнение колонтитулов на нескольких документах
- MySQL составной запрос
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Июн
Построение сложного SQL-запроса выборки
Eсть следующие таблицы:
- Задачи
- Работники
- Связки задач и работников (какие работники могут выполнять какую задачу)
Работников на задачу может быть как 1, так и больше. Одни и те же работники могут быть записаны на выполнение разных задач в разных комбинациях.
Например. У нас есть работники Иван, Пётр, Степан, Максим.
Есть задачи «Уборка территории», «Покраска стен», «Смазывание дверей», «Разгрузка макулатуры», «Подстригание газона»
Уборкой территории могут заниматься Иван и Пётр.
Покраской стен — Пётр и Степан.
Смазыванием дверей -Степан и Максим.
Разгрузкой макулатуры — Максим и Иван.
Подстриганием газона — Пётр.
Всё это записано вот в такие таблицы:
tasks
id
description
status
workers
id
name
tasks_workers_links
id
task_id
worker_id
Первая задача (Уборка территории), в которой задействованы Иван и Пётр, имеет статус working. Остальные задачи имеют статус wait.
Мне нужно отобрать одну задачу, которая готова идти в работу (status=wait), и ни один из её работников не задействован в задачах status=working.
Проблемы создаёт тот факт что один и то же рабочий может быть записан на разные задачи. В данном примере нужно получить только одну задачу:
| Смазыванием дверей — Степан и Максим. |
потому что Иван и Пётр, задействованные в первой таске (которая уже working) не могут учавствовать в других задачах из-за своей занятости.
Я хотел получить некий красивый JOIN на выходе, но придумать его к сожалению не смог.
Решил некрасиво следующими запросами.
Сперва берём задачи которые уже в работе
SELECT id FROM tasks WHERE status='working'
Затем берём id работников которые в этих задачах задействованы
SELECT worker_id FROM tasks_worker_links WHERE task_id IN(предыдущий запрос)
На основании этого, берём все id задач где есть работники из предыдущего запроса:
SELECT task_id FROM tasks_workers_links WHERE worker_id IN(предыдущий запрос)
Их мы должны игнорировать при выборке.
И наконец выбираем задачи которые могут пойти в работу:
SELECT * FROM tasks WHERE status='wait' AND id NOT IN(предыдущий запрос) LIMIT 1
Таким образом, я соединяю аж 4 запроса.
SELECT * FROM tasks WHERE status='wait' AND id NOT IN(
SELECT task_id FROM tasks_workers_links WHERE worker_id IN(
SELECT worker_id FROM tasks_worker_links WHERE task_id IN(
SELECT id FROM tasks WHERE status='working'
)
)
) LIMIT 1
При тысячах записей это создаст серьёзные проблемы с производительностью — вложенные запросы извлекают слишком много данных.
В общем, буду благодарен за любые идеи как это всё превратить в красивый и быстрый единый SQL.
18th
Июл
Создать запрос который выводил бы список студентов, тех у кого хотя бы одна «3»
помогите создать запрос который выводил бы список студентов, тех у кого хотя бы одна «3» (допустим: «Зачет,4,3», «Зачет,3,5» и т.д)
свой вариант запроса в БД,но там выходят и те у кого хотя бы 1 долг.
долг-это пробел в таблице «оценки» (читать всё…)
Облако меток
реестр ассемблер timer TBitMap SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid поиск canvas файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту

пеллетные котлы

Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)


