Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск несоответствий при объединениях

544
31 января 2003 года
Dutch Shultz
7 / / 20.12.1999
Начал изучать БД по книге Тихомирова MS SQL и не могу разобраться в одном моменте из этой книги.
Допустим есть 2 таблицы авторов и редакторов (authors,editors).Как можно при помощи объединения выявить редакторов,не написавших ни одной книги(не состоящих в таблице авторов).Он пишет следующий код:

select e.ed_name
from editors e,authors a
where e.ed_id<>a.au.id

где ed_id и au_id ключи к соответствующим таблицам.
Но тогда ничего не получается-ведь идет декартово произведение и например в одном из его фрагментов будет

РЕДАКТОРЫ АВТОРЫ

сидоров петров
сидоров иванов
сидоров сидоров

Он просто икслючит последнюю строку,а первые 2 останутся и после оператора distinct сидоров будет в списке редакторов,не написавших ни одной книги,хотя это неверно.

Заранее спасибо.
3.3K
08 февраля 2003 года
gal
5 / / 08.02.2003
Цитата:
Originally posted by Dutch Shultz
Начал изучать БД по книге Тихомирова MS SQL и не могу разобраться в одном моменте из этой книги.
Допустим есть 2 таблицы авторов и редакторов (authors,editors).Как можно при помощи объединения выявить редакторов,не написавших ни одной книги(не состоящих в таблице авторов).Он пишет следующий код:

select e.ed_name
from editors e,authors a
where e.ed_id<>a.au.id

где ed_id и au_id ключи к соответствующим таблицам.
Но тогда ничего не получается-ведь идет декартово произведение и например в одном из его фрагментов будет

РЕДАКТОРЫ АВТОРЫ

сидоров петров
сидоров иванов
сидоров сидоров

Он просто икслючит последнюю строку,а первые 2 останутся и после оператора distinct сидоров будет в списке редакторов,не написавших ни одной книги,хотя это неверно.

Заранее спасибо.

3.3K
08 февраля 2003 года
gal
5 / / 08.02.2003
[QUOTE]Originally posted by Dutch Shultz
Тихомирова не читал, но судя по примеру - ерунда ! Объединением отсутствия записей в таблице никогда не выделить. Для этого используется конструкция not exists или in, или any с subquery в where условии.

select e.ed_name
from editors e
where e.ed_id not in (select a.au_id from authors a)

Best wishes !
3.5K
10 февраля 2003 года
Lafert
1 / / 10.02.2003
Еще один вариант:
select e.ed_name
from editors e left join authors a on a.au_id=e.ed_id
where a.au.id is null


Цитата:
Originally posted by Dutch Shultz
Начал изучать БД по книге Тихомирова MS SQL и не могу разобраться в одном моменте из этой книги.
Допустим есть 2 таблицы авторов и редакторов (authors,editors).Как можно при помощи объединения выявить редакторов,не написавших ни одной книги(не состоящих в таблице авторов).Он пишет следующий код:

select e.ed_name
from editors e,authors a
where e.ed_id<>a.au.id

где ed_id и au_id ключи к соответствующим таблицам.
Но тогда ничего не получается-ведь идет декартово произведение и например в одном из его фрагментов будет

РЕДАКТОРЫ АВТОРЫ

сидоров петров
сидоров иванов
сидоров сидоров

Он просто икслючит последнюю строку,а первые 2 останутся и после оператора distinct сидоров будет в списке редакторов,не написавших ни одной книги,хотя это неверно.

Заранее спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог