Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
две таблицы в таблице EMP есть значение NULL сотрудник не принадлежит ни одному из отделов

составляю запрос через exists, но
в таком варианте возвращает все строки
таблицы DEPT
select DEPTNO,DNAME,LOC 
from user01.dept
where exists
	(select deptno from user01.emp 
		where DEPTNO is null)


в таков вообще ни одной, но сотрудник точно есть с значением NULL

select DEPTNO,DNAME,LOC 
from user01.dept
where not exists
	(select deptno from user01.emp 
		where DEPTNO is null)
18 фев 14, 12:37    [15581656]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
две таблицы в таблице EMP есть значение NULL сотрудник не принадлежит ни одному из отделов

Какое отношение "не принадлежащий никому сотрудник" имеет к "отделы, где нет сотрудников" ?

mevmix
в таком варианте возвращает все строки

Еще бы. Ведь ваш подзапрос никак не связан с внешним запросом

ЗЫ
Вы контрольную делаете что ли ?
18 фев 14, 12:40    [15581683]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,

нет не контрольную
просто пытаюсь понят те запросы которые не получилось сделать
18 фев 14, 12:43    [15581696]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
просто пытаюсь понят те запросы которые не получилось сделать

Ну так вы пишите одну задачу, а решаете другую
"отделы, где нет сотрудников" и "сотрудники без отдела" - это разные задачи
18 фев 14, 12:44    [15581712]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,
хорошо спрошу по другому как мне вывести строки из таблицы
user01.dept через exists выбрав из второй таблицы
user01.emp в столбце DEPTNO значение с NULL?
18 фев 14, 12:55    [15581803]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
как мне вывести строки из таблицы
user01.dept через exists выбрав из второй таблицы
user01.emp в столбце DEPTNO значение с NULL?

Вы их и вывели
Ведь в такой постановке задачи таблицы не связаны никаким условием
И значит для любой записи dept всегда найдется запись emp, в столбце DEPTNO которой значение с NULL
18 фев 14, 12:58    [15581823]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,

должно было вернуть одну строку только
будем разбираться
спс
18 фев 14, 12:59    [15581830]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
должно было вернуть одну строку только

На основании чего сделан такой вывод ?
18 фев 14, 13:00    [15581846]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,

на основании того что в 10, 20, 30 отделах есть сотрудники, а 40 нет сотрудников
18 фев 14, 13:03    [15581859]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
LEFT JOIN + DEPTNO IS NULL
18 фев 14, 13:05    [15581865]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
на основании того что в 10, 20, 30 отделах есть сотрудники, а 40 нет сотрудников

И причем тут сотрудник, не входящий ни в один отдел то ?
Если сотрудник не входит ни в один отдел, значит для _любого и каждого_ отдела он в него не входит.
Неужели такая простая логика непонятна ?
18 фев 14, 13:05    [15581867]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Зачем Вам Exists
Берем 2-й вариант запроса, из предыдущего поста (вообще он 3-й), ну думаю Вы меня поняли )

SELECT [user01].DEPT.DEPTNO,
	   [user01].DEPT.DNAME,
	   [user01].DEPT.LOC
  FROM [user01].[DEPT] LEFT JOIN [user01].[EMP] 
  ON [user01].DEPT.DEPTNO = [user01].EMP.DEPTNO
 WHERE [user01].EMP.DEPTNO IS NULL
  group by  [user01].DEPT.DEPTNO,
	        [user01].DEPT.DNAME,
	        [user01].DEPT.LOC 
18 фев 14, 13:07    [15581878]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Stanislav,

через JOIN понятно что можно сделать
задача стоит через EXISTS
18 фев 14, 13:11    [15581901]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
Glory
Member

Откуда:
Сообщений: 104760
mevmix
задача стоит через EXISTS

Так делайте, как хотите
Непонятно только, что вы прицепились к EMP, которых NULL-вый DEPTNO ?
Вам надо искать тех EMP, у которых нет DEPTNO для текущей записи DEPT
18 фев 14, 13:13    [15581927]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать отделы из таблицы где нет сотрудников через EXISTS  [new]
mevmix
Member

Откуда:
Сообщений: 56
Glory,


мне стыдно реально затупил и привязался к этому ниловому значению
сори
select DEPTNO,DNAME,LOC 
from user01.DEPT
where not exists
	(select user01.emp.DEPTNO from user01.EMP 
		where user01.DEPT.DEPTNO = user01.EMP.DEPTNO)
18 фев 14, 13:30    [15582073]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить