SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.09.2012 01:45:25

pzone
Участник
Зарегистрирован: 22.09.2012
Сообщений: 4

Помогите решить задачку

Помогите новичку,дали решить задачку,все ломаю голову никак не найду решение.Есть 2 таблицы workers и departments примерно такого вида:

id    name    id_dep
1     fio1      1
2     fio2      1
3     fio3      2
4     fio4      3
5     fio5      1
6     fio6      2
7     fio7      1


id_dep    dep_name
1           отдел продаж
2           отдел закупок
3           бухгалтерия

какой надо составить запрос,чтобы вывести отдел в котором работают более 3 сотрудников?
заранее спасибо)

Неактивен

 

#2 22.09.2012 01:55:13

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите решить задачку

Как вариант:

select * from departments d where (select count(*) from workers where id_dep = d.id_dep) >= 3;


Или (если достаточно вывести только id департамента)

select id_dep from workers group by id_dep having count(*)>=3;


Если же нужно полностью, то как-то так:

SELECT d.* FROM departments d JOIN ( select id_dep from workers group by id_dep having count(*)>=3 ) as need_departments USING(dep_id);


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 22.09.2012 20:32:01

pzone
Участник
Зарегистрирован: 22.09.2012
Сообщений: 4

Re: Помогите решить задачку

deadka написал:

Как вариант:

select * from departments d where (select count(*) from workers where id_dep = d.id_dep) >= 3;


Или (если достаточно вывести только id департамента)

select id_dep from workers group by id_dep having count(*)>=3;


Если же нужно полностью, то как-то так:

SELECT d.* FROM departments d JOIN ( select id_dep from workers group by id_dep having count(*)>=3 ) as need_departments USING(dep_id);

спасибо большое!!!вы не дали моему мозгу взорваться от безысходности) можно только объяснить,что означает d в запросе?

Неактивен

 

#4 22.09.2012 20:50:47

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите решить задачку

d - это алиас, переименовывание таблицы departments. В данном случае нужен для того того, чтобы во внутреннем запросе мы ориентировались на конкретную строку во внешнем.
Иногда еще пишут departments as d, но можно и так - departments d.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 22.09.2012 22:02:30

pzone
Участник
Зарегистрирован: 22.09.2012
Сообщений: 4

Re: Помогите решить задачку

deadka написал:

d - это алиас, переименовывание таблицы departments. В данном случае нужен для того того, чтобы во внутреннем запросе мы ориентировались на конкретную строку во внешнем.
Иногда еще пишут departments as d, но можно и так - departments d.

я уже начинал догадываться) спасибо за разъяснения! последнее что непонятно,зачем в последнем варианте с джоином нужно d.* разве нельзя просто * ?

Неактивен

 

#6 22.09.2012 22:10:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите решить задачку

Если бы мы выбирали из одной таблицы, то наверное можно и *. Но тут же JOIN - мы соединяем две таблицы - в данном случае таблицу departments и выборку ID тех департаментов, в которых трудится больше трех человек. Поэтому интерпретатор SQL выдаст не тот результат, что ожидается, если написать просто *.

Ну а вообще * лучше не использовать, а перечислять те поля, которые нужны.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 23.09.2012 00:09:09

pzone
Участник
Зарегистрирован: 22.09.2012
Сообщений: 4

Re: Помогите решить задачку

deadka написал:

Если бы мы выбирали из одной таблицы, то наверное можно и *. Но тут же JOIN - мы соединяем две таблицы - в данном случае таблицу departments и выборку ID тех департаментов, в которых трудится больше трех человек. Поэтому интерпретатор SQL выдаст не тот результат, что ожидается, если написать просто *.

Ну а вообще * лучше не использовать, а перечислять те поля, которые нужны.

еще раз спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson