Форум: "Базы";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизСоединение таблиц на основе НЕвхождения Найти похожие ветки
← →
B (2005-09-01 15:11) [0]Такой вопрос наверняка всплывал много раз, но не знаю как искать...
Задача - получить записи, которые НЕ входят в подзапрос:
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
В ответ возвращается сонмище строк, кажется, оно называется Декартовым.
← →
DenK_vrtz © (2005-09-01 15:16) [1]Использовать NOT EXISTS
← →
Виталий Панасенко (2005-09-01 15:18) [2]Это MS SQL ? С им не работал, но в стандарте вроди так
select * from table where id not in (select id from table2 where ...)
← →
B (2005-09-01 16:54) [3]Это 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, вообще ничего не возвращает :(
← →
Desdechado © (2005-09-01 17:05) [4]в Оракле есть в SELECT такая хитрая опция MINUS - не оно ли это?
← →
ANB © (2005-09-01 17:18) [5]
> B (01.09.05 16:54) [3]
1. Читать в справке описание not exists
2. Тут лучше not in
← →
B (2005-09-01 17:20) [6]Спасибо.
MINUS, похоже, подошел.
← →
Val © (2005-09-01 17:25) [7]может что-то типа этого:
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
← →
Fay © (2005-09-01 18:06) [8]B (01.09.05 17:20) [6]
Oracle, что-ли? Надо сразу говорить.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c