все объекты не связанные с заданным
От: Amor Россия  
Дата: 07.02.11 18:01
Оценка:
Есть две таблицы:
1) Object. Поля: ID, Name.
2) Link. Поля: ObjectId1, ObjectId2.
Для Link есть правило ObjectId1 < ObjectId2 (не знаю насколько это важно).

Допустим в таблице Object следующие записи
ID | Name
----------
1 | one
2 | two
3 | three
4 | four
5 | five
6 | six
7 | seven
8 | eight

В Link следующие

ObjectId1 | ObjectId2
------------------------
1 | 1
1 | 2
1 | 3
1 | 5
1 | 6

Надо сделать запрос "все объекты, которые НЕ связаны с 1"

Т.е. надо получить

ID | Name
----------
4 | four
7 | seven
8 | eight

Можно ли это сделать с помощью JOIN-а?
Re: все объекты не связанные с заданным
От: avpavlov  
Дата: 07.02.11 21:20
Оценка:
A>Можно ли это сделать с помощью JOIN-а?

Мой любимый вопрос на собеседовании.

Хинт: можно
Re[2]: все объекты не связанные с заданным
От: Amor Россия  
Дата: 08.02.11 02:47
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>>Можно ли это сделать с помощью JOIN-а?
A>Мой любимый вопрос на собеседовании.
A>Хинт: можно
Колись, как
Re[2]: все объекты не связанные с заданным
От: Amor Россия  
Дата: 08.02.11 04:31
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>Хинт: можно

Неужели так?

SELECT O2.ID, O2.Name FROM Link 
     JOIN Object As O2 ON Object.ID=Link.ObjectId2 
     WHERE Link.ObjectId1 Is NULL AND Link.ObjectId2 Is NULL
Re[2]: все объекты не связанные с заданным
От: Amor Россия  
Дата: 08.02.11 04:34
Оценка: +1
Здравствуйте, avpavlov, Вы писали:
A>Хинт: можно
Вернее, неужели так?

SELECT O2.ID, O2.Name FROM Link 
     RIGHT OUTER JOIN Object As O2 ON Object.ID=Link.ObjectId2 
     WHERE Link.ObjectId1 Is NULL AND Link.ObjectId2 Is NULL
Re: все объекты не связанные с заданным
От: lazymf Россия  
Дата: 08.02.11 05:30
Оценка: +1
Здравствуйте, Amor, Вы писали:

A>Можно ли это сделать с помощью JOIN-а?


Можно, но не проще ли через where not exists?
Re[3]: все объекты не связанные с заданным
От: avpavlov  
Дата: 08.02.11 07:33
Оценка:
да
Re[2]: все объекты не связанные с заданным
От: avpavlov  
Дата: 08.02.11 07:49
Оценка:
L>Можно, но не проще ли через where not exists?

Вообщем-то, так и есть.

Так что тому, кто утверждает, что он знает СКЛ, нужно владеть и той и той техникой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.