|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.05.2011, 15:31 | #1 |
Пользователь
Регистрация: 15.03.2011
Сообщений: 12
|
упрощение SQL запросов
помогите пожалуйста, избавиться от вложенных селектов в двух запросах:
1 запрос: Найти сотрудников, работавших в должности начальника отдела, и не работавших в должности зам. директора. SELECT * FROM [worker] WHERE [id_P] IN ( SELECT [id_P] FROM [Post] WHERE [название] = 'начальник отдела' ) AND NOT IN ( SELECT [id_P] FROM [Post] WHERE [название] = 'зам. директора' ) 2 запрос: Вывести список отделов, в которых у начальника ровно два заместителя. SELECT b.* FROM [Otdel] b INNER JOIN (SELECT id_O, COUNT(название) AS Naz FROM [Post] WHERE [название] = 'зам начальника' GROUP BY [id_O] ) m ON b.id_O = m.id_O AND m.Naz = 2 Сущности: Отдел (Otdel), Должность (Post), Сотрудник (worker). Создание нормализованной БД: Otdel (id_O,name) Post (id_P, name, id_O) worker (id_W, so-name, name, дата приема, дата увольнения, id_P) create table Otdel( id_O int unsigned not null auto_increment key, name char(6)); create table Post ( id_P int unsigned not null auto_increment key, name char(30), id_O integer); create table worker ( id_W int unsigned not null auto_increment key, so-name char(30), name char(20), date_П DATE, date_У DATE, id_D integer); |
28.05.2011, 17:28 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Код:
I'm learning to live...
|
|
30.05.2011, 09:14 | #3 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
(a=b) and (a<>b) Код:
Код:
Код:
lокончательный фильтр (where) два первых соединения IS NOT NULL а третье IS NULL.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 30.05.2011 в 09:36. |
|
30.05.2011, 10:33 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
30.05.2011, 10:42 | #5 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Цитата:
а что получится, то получится.
программа — запись алгоритма на языке понятном транслятору
|
||
30.05.2011, 19:00 | #6 |
Пользователь
Регистрация: 15.03.2011
Сообщений: 12
|
спасибо большое, а вообще второй запрос верно составлен?
2 запрос: Вывести список отделов, в которых у начальника ровно два заместителя. SELECT b.* FROM [Otdel] b INNER JOIN (SELECT id_O, COUNT(название) AS Naz FROM [Post] WHERE [название] = 'зам начальника' GROUP BY [id_O] ) m ON b.id_O = m.id_O AND m.Naz = 2 |
30.05.2011, 19:54 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
я бы только вместо COUNT(название) AS Naz написал ... COUNT(*) AS ChisloZamov но для запроса это несущественно... |
|
30.05.2011, 20:47 | #8 |
Пользователь
Регистрация: 15.03.2011
Сообщений: 12
|
меня смущает строчка GROUP BY [id_O] ) m
поэтому я не знаю как переделать запрос |
30.05.2011, 23:49 | #9 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Цитата:
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
12 SQL-запросов | Best Programmist | Microsoft Office Access | 7 | 12.12.2009 20:46 |
ограничение кол-ва SQL запросов в BDE ?!!! | Qdesnik | БД в Delphi | 1 | 15.05.2009 17:24 |
Написание SQL-запросов | tsergey | Помощь студентам | 9 | 12.02.2009 11:17 |
использование SQL запросов в коде VBA | b00s | Microsoft Office Access | 3 | 26.04.2008 13:40 |
несколько запросов SQL | Arteom | БД в Delphi | 3 | 09.09.2007 23:39 |