2014-01-17 6 views
1

Я пытаюсь выполнить два запроса в гнезде, но ниже запрос не дает каких-либо о/рВложенный запрос не дает желаемых результатов

select Object_name from IM_top where Id_number in 
(select t.Id_number from IM_top t,IM_alarm_state a,IM_network_element n,Related_to_AH_id r 
where t.Id_number = a.Id_number and t.Id_number = n.Id_number and t.Id_number *= r.Id_from 
and t.Object_class like 'IM_top/IM_alarm_state/IM_network_element%') where Object_name not in (select substring(object,LEN(object)-CHARINDEX(',',REVERSE(object)) + 2,CHARINDEX(',',REVERSE(object)) + 1 ) from fmadb_1_1..FMA_alarm_text_route) 

Когда я запускать эти запросы индивидуально первый запрос возвращает 2206 строк

select Object_name from IM_top where Id_number in 
(select t.Id_number from IM_top t,IM_alarm_state a,IM_network_element n,Related_to_AH_id r 
where t.Id_number = a.Id_number and t.Id_number = n.Id_number and t.Id_number *= r.Id_from 
and t.Object_class like 'IM_top/IM_alarm_state/IM_network_element%') 

и второй запрос возвращает 184 строк

select substring(object,LEN(object)-CHARINDEX(',',REVERSE(object)) + 2,CHARINDEX(',',REVERSE(object)) + 1 ) from fmadb_1_1..FMA_alarm_text_route 

Я ожидаю разницу 2206-184, которая 2022 строк, когда я запускаю вложенный запрос, но o/p, который он дает, - это 0 строк.

Любое обходное решение?

+0

Может быть, все значения «Object_name» отображаются во втором запросе? –

+0

Нет второго запроса имеет 184 Имена объектов и сначала имеет 2206 Имена объектов. Использование вложенного запроса я ожидаю разницу в 2206-184 строк – gopesh

+0

Но имеет ли первый запрос какое-либо 'Object_name', которое не отображается на втором? (Он имеет больше, да, но может быть повторен) –

ответ

0

Вы использовали два Where Пункта вместо AND

Попробуйте эту

select Object_name from IM_top where Id_number in 
(select t.Id_number from IM_top t,IM_alarm_state a,IM_network_element n,Related_to_AH_id r 
where t.Id_number = a.Id_number and t.Id_number = n.Id_number and t.Id_number *= r.Id_from 
and t.Object_class like 'IM_top/IM_alarm_state/IM_network_element%') AND Object_name not in (select substring(object,LEN(object)-CHARINDEX(',',REVERSE(object)) + 2,CHARINDEX(',',REVERSE(object)) + 1 ) from fmadb_1_1..FMA_alarm_text_route) 

Надеется, что это поможет вам

+0

, даже после того, как результаты AND совпадают с 0 строками – gopesh

+0

, даже после использования И результаты равны 0 строкам – gopesh

+0

Имя объекта принадлежит к какой таблице –

1

Вашего подзапрос возвращает NULL, который всегда приводит к пустому набору ответов:

a НЕ В (1, NULL)

логически эквивалентно

<> 1 и <> NULL

, который решает

значение TRUE/FALSE И НЕИЗВЕСТНЫЙ

и, наконец, приводит к

НЕИЗВЕСТНА

для любой строки.

Добавить условие WHERE, чтобы удалить NULL или лучше изменить NOT IN на NOT EXISTS.

+0

Когда я запускаю запрос и подзапрос отдельно, возвращает строки, но при возврате этих запросов результаты не возвращаются. – gopesh

+0

Как я писал: проверьте подзапрос для NULL и удалите их с условием WHERE. – dnoeth

+0

Подзапрос не возвращает null, он просто показывает 0 строк, затронутых – gopesh

Смежные вопросы