[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача по MySQL "query"
Страницы: 1, 2, 3
Valeriya12
Здравствуй!
Извините заранее за хромающий русский ;)

У меня задача по MySQL query: "Найти имя менеджера работника, который у него самая высокая зарплата"

Я смогла найти имя работника и его отделение. Но, как приказать "покажи мне имя менеджер этого отделения"? Пожалуйста помогите.

Вот мои query чтоб получить имя работника и его отделение (и зарплата).


SELECT name, salary, dept_id FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id) as newchart WHERE manager_id IS NULL Order By salary DESC LIMIT 1


Теперь, не уверена, что делать.

Я прикрепила мою базу данных.
kjdgh
SELECT name FROM table WHERE отделение

Не понял в каком столбике указаны отделения)

_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



Valeriya12
В столбике "dept_id" указаны отделения

Я почти преуспела, моя логика хороша по-моему, но что-то не так в моем синтаксисе. Получаю ошибку "#1146 - Table 'training.newchart' doesn't exist"


SELECT name FROM newchart WHERE dept_id=
(
SELECT dept_id FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id) as newchart WHERE manager_id IS NULL Order By salary DESC LIMIT 1)
exotica
Цитата
"Найти имя менеджера работника, который у него самая высокая зарплата"

Я понял как: Найти имя менеджера с самой большой зарплатой
SELECT `name` FROM `newchart` WHERE MAX(`salary`)


Или нужно было найти Имя Менеджера, у которого работник получает наивысшую зарплату из всех

А ошибка говорит о том что нету такой таблицы в БД

_____________
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
Valeriya12
Да, exotica-- нужно было найти Имя Менеджера, у которого работник получает наивысшую зарплату из всех. Извините smile.gif


Цитата
А ошибка говорит о том что нету такой таблицы в БД


Да, но я думала, что я определила эту новую таблицу когда написала "as newchart"
kjdgh
а теперь убери as newchart и в начале запроса замени newchart на
(
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id)

и глянь что выдаст.

_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



Valeriya12
Получаю ошибку "#1248 - Every derived table must have its own alias"

SELECT name FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id)

WHERE dept_id=
(
SELECT dept_id FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id) as newchart WHERE manager_id IS NOT NULL



Поэтому я с начала поставила этот 'alias', чтоб "ошибку" не получить.
Valick
Valeriya12, смотрю на ваш запрос и ненравится он мне сильно, а когда такое случается, то есть подозрение о неправильной структуре БД


_____________
Стимулятор ~yoomoney - 41001303250491
Valeriya12
Вы имеете в виду, что данные которые нам дали, по-идиотски построенные?
kjdgh
Цитата (Valeriya12 @ 19.06.2014 - 16:48)
Вы имеете в виду, что данные которые нам дали, по-идиотски построенные?

если приходится дедать по 100500 вложенных запросов, то да.
Все ваши данные прекрасно поместятся и в 1й таблице вида id - name - salary - dept_id - manager_id

_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



Valeriya12
Да, Вы конечно совсем правы, я тоже так и думаю. Но я на курсе по PHP и учитель решил всё усложнять нарочно. Может быть это не самое мудрое решение чтоб учить MySQL, но все-таки я бы хотела стараться решить задачу, и я думаю, что я почти это сделала... но что-то маленькое я пропускаю, не так ли?
kjdgh
Ну если учитель, то ладно)) пробуйте такой запрос. не должен выдавать ошибку насчет алиасов.



SELECT name FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id) as newchart_ WHERE dept_id=
(
SELECT dept_id FROM (
SELECT t_empl.id, name, salary, manager_id, empl_id, dept_id
FROM t_empl
LEFT OUTER JOIN t_dept
ON t_empl.id=t_dept.manager_id
LEFT OUTER JOIN t_asnmt
ON t_empl.id=t_asnmt.empl_id) as newchart WHERE manager_id IS NULL Order By salary DESC LIMIT 1)


_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



Valeriya12
Ошибки не были - результат был

name
John Doe
Jane Doe
Philip the man


Но, не уверена как это помогает. По-моему я была в правильном направлении, я же нашла работника которая у неё самая высокая зарплата - Jane Joe, и её отдел...теперь, все что осталось, это запросить "name" от полного списка где dept_id (отдел) = отдел который я нашла ...и где id_manager IS NOT NULL. По-моему, вполне логично...только не могу найти правильный синтаксис.
kjdgh
я лишь исправил ошибку синтаксиса и саму структуру запроса не трогал. как Вы написали, так оно и есть.

_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



kjdgh
Цитата
теперь, все что осталось, это запросить "name" от полного списка где dept_id (отдел) = отдел который я нашла ...и где id_manager IS NOT NULL. По-моему, вполне логично...только не могу найти правильный синтаксис.

Подробнеее. Я не понимаю что значит "отдел который я нашла" и что за "полный список" (список чего?)


_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.