С Новым годом! Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 42

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

07.03.2020, 20:09. Показов 1044. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru