Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Соединение таблиц на основе НЕвхождения


B ©   (2005-09-01 15:11:00) 

Такой вопрос наверняка всплывал много раз, но не знаю как искать...

Задача - получить записи, которые НЕ входят в подзапрос:

Select T.*
from BASE1 T,(SELECT ttt.text bas_text, ttt.id bas_id
                     FROM o_tree ttt
                     CONNECT BY ttt.owner_id = PRIOR ttt.id
                     START WITH ttt.id = 288007) tree


Если задать
where T.id IN bas_id
все нормально - возвращаются только строки, входящие в позапрос

Если задать
where T.id NOT IN bas_id
В ответ возвращается сонмище строк, кажется, оно называется Декартовым.


Fay   (2005-09-01 18:06:00) [1]

B   (01.09.05 17:20) [6]
Oracle, что-ли? Надо сразу говорить.


Val   (2005-09-01 17:25:00) [2]

может что-то типа этого:

Select T.*
from BASE1 T
where not exists (SELECT 1
                       FROM o_tree ttt
                       where ttt.id = t.id
                       CONNECT BY ttt.owner_id = PRIOR ttt.id
                       START WITH ttt.id = 288007) tree


B   (2005-09-01 17:20:00) [3]

Спасибо.
MINUS, похоже, подошел.


ANB   (2005-09-01 17:18:00) [4]


> B   (01.09.05 16:54) [3]

1. Читать в справке описание not exists
2. Тут лучше not in


Desdechado   (2005-09-01 17:05:00) [5]

в Оракле есть в SELECT такая хитрая опция MINUS - не оно ли это?


B   (2005-09-01 16:54:00) [6]

Это Oracle...
Он так тоже позволяет, результат будет тем же
Но в силу того, что надо проверять и другие данные из позапроса приходится писать его в FROM

NOT EXISTS не помог :(

Выражение
elect distinct T.*
from Base1 T
where exists (SELECT ttt.text bas_text, ttt.id bas_id
                     FROM o_tree ttt
                     CONNECT BY ttt.owner_id = PRIOR ttt.id
                     START WITH ttt.id = 288007)

вернуло то же что и IN,

а если заменить на NOT EXISTS, вообще ничего не возвращает :(


Виталий Панасенко   (2005-09-01 15:18:00) [7]

Это MS SQL ? С им не работал, но в стандарте вроди так
select * from table where id not in (select id from table2 where ...)


DenK_vrtz   (2005-09-01 15:16:00) [8]

Использовать NOT EXISTS


Наверх

Титульная страница Поиск, карта сайта Написать письмо