0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 42

Почему не работает запрос?

07.03.2020, 20:09. Показов 1086. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
бисуху пасаны

Есть некая проблема с запросам. Есть две таблицы: departament и employee.

Поля departament:
Id
Name

Поля employee:
id
department_id
chief_id
name
salary



Если обратить внимание на звание полей, то можно заметить, что эти две таблицы связаны друг с другом.
Вторая таблица связана сама с собой. chief_id связан с id. У каждого работника, может быть какой-то руководитель
Запросом надо вывести всех сотрудников, у которых нет своего собственного руководителя.

Таблица employee заполнена так:

(departament_id, chief_id, name, salary) values (1, NULL, 'Ребров', 60000),
(1, 1, 'Круглов', 15000),
(1, 1, 'Репин', 15000),
(1, 1, 'Репина', 50000),
(2, NULL, 'Ильин', 40000),
(2, 5, 'Карамзин', 60000),
(2, 5, 'Ибанович', 35000),
(3, NULL, 'Калинина', 35000),
(3, NULL, 'Хуйаков', 45000),
(3, 9, 'Руглов', 54000);

Если chief_id у человека null и у него есть хотя бы один подчинённый, значит он начальник
Есди chief_id у человека null и нет никакого подчинённого, значит он сотрудник


Своим запросом, пытаюсь вывести тех сотрудников, у которых нет начальника.
Логика такая, создаю временную таблицу, заполняю ее теми сотрудниками, у которых chief_id равен null и при этом их id нигде не фигурирует в chief_id (у других сотрудников).
Затем я эту временную таблицу сравниваю с основной по employee.id и затем, группирую данные по отделам
Вообще, можно было сделать без создания временной таблицы, просто добавить проверку в having и всё но я придак проста

Однако запрос почему-то не работает, не понимаю почему?
Вот запрос:


MySQL
1
2
3
4
select departament.name as 'Название отдела', employee.name as 'Сотрудник без начальника'  from (employee, (select departament.id as depart, employee.id as employee_id, employee.chief_id as chif from employee join departament on (employee.departament_id = departament.id)
                                                                                    group by departament.id having employee.chief_id is null and employee.id not in (select employee.chief_id from employee)) as null_employee)
                                                                                    join departament on (employee.departament_id = departament.id)
                                                                                    where employee.id = null_employee.employee_id group by departament.id;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2020, 20:09
Ответы с готовыми решениями:

Почему не работает запрос?
Доброго времени суток. Подскажите пожалуйста, почему не работает запрос :wall:. Браузер показывает сообщение об ошибке: You have an error...

Почему запрос не работает
Доброго времени суток. Гуру, подскажите почему запрос SELECT CASE WHEN ROW_COUNT()=1 THEN INSERT INTO db_paramt...

Почему запрос работает так медленно?
Привет. Появилась проблема с запросом. Уже второй час пытаюсь решить, начинает крыша ехать(((. Суть проблемы: есть два запроса в одной...

4
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
08.03.2020, 05:27
id таких сотрудников находится запросом
SQL
1
2
3
SELECT ss.id
FROM employee ss LEFT JOIN employee cc ON ss.id = cc.chief_id
WHERE ss.chief_id IS NULL AND cc.chief_id IS NULL
Остальное вытаскивайте сами, джойня его с Вашими таблицами.
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 42
08.03.2020, 10:20  [ТС]
Цитата Сообщение от ltv_1953 Посмотреть сообщение
апросом
а можно спросить, почему мой запрос выдаёт пустые строки? ничего не возвращает, вроде все по условиям правильно прописано
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
08.03.2020, 10:55
Цитата Сообщение от Sh1t_code Посмотреть сообщение
почему мой запрос выдаёт пустые строки?
Нет. Вы то, что выложено Вами прочитать пробовали? А Вы просите в нем разобраться. Мой запрос работает? Ну так разбирайтесь в нем и пользуйтесь ... .
0
15 / 14 / 2
Регистрация: 12.02.2015
Сообщений: 95
11.03.2020, 01:23
Sh1t_code прежде чем писать страшные запросы пишите простые

вы выбираете две таблицы
соединяете через join это employee и departament
и к этому всему делаете добавление винегрета из запроса который именуете алиасом null_employee
который потом пытаетесь совместить с таблицей departament которая каким то чудом
скрещивается с employee
и при этом постоянно группируете.... если такой запрос кинуть на боевой сервер то
при нужном количестве записей каждый запрос будет проходить сутки двое
или ничего

я вам немного разместил ваш код ... кому как, а мне помогает разбираться )


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT departament.name AS 'Название отдела', employee.name AS 'Сотрудник без начальника'
 
 FROM 
   (employee,
      (
          SELECT departament.id AS depart, employee.id AS employee_id, employee.chief_id AS chif 
          FROM employee JOIN departament ON (employee.departament_id = departament.id)
          GROUP BY departament.id HAVING employee.chief_id IS NULL 
                      AND employee.id NOT IN 
                                             (
                                              SELECT employee.chief_id 
                                              FROM employee
                                             )
      ) AS null_employee
    )
 
     JOIN departament ON (employee.departament_id = departament.id)
     WHERE employee.id = null_employee.employee_id 
          GROUP BY departament.id;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2020, 01:23
Помогаю со студенческими работами здесь

Простейший запрос prepare("UPDATE - почему не работает
почему не работает простейший запрос - что я сделал неправильно $like = 5; $id = 54; $stmttt = $dbh->prepare("UPDATE...

Не могу понять почему не работает простой запрос ошибка в логике
в бд две записи Array ( => Array ( => 52 => 89021557 => 21200 ) ...

Запрос: почему не работает?
DELETE Товары.* FROM INNER JOIN Товары ON .код = Товары.код; Возможно, причина в том, что таблица "Товары" участвует в...

Почему не работает GET запрос?
Maxens, А что происходит? Ошибка? Исключение?

Почему не работает запрос-ИК
Почему в Access не работает? INSERT INTO Должности (Имя) VALUES ('ЕРНАР'); SELECT Имя FROM Должности; PS:По отдельности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru