2016-12-01 4 views
0

у меня есть две таблицы таблицы один содержитподзапрос возвращает более 1 значение в SQL

ABCDEF

и в таблице два содержит

bcdefghijkl

я хочу показать данные за м таблица два, и данные не должна использоваться в таблице один (k l) здесь значение k and l должно быть напечатано

в моем примере я написал запрос

select comarea from companyarea where comarea !=(select area from companyallot where comname='24' and zone='west' and location='mumbai') 

но ошибка приходит

Msg 512, Level 16, State 1, Line 1 Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

здесь, в моем примере я хочу использовать область, которая не используется в таблице под названием companyallot

ответ

3
В тех случаях, когда состояние «=» оператор будет иметь дело с одним значением, «в» оператор будет иметь дело с несколько значений. Поэтому вместо использования! = Используйте оператор «не в», как показано ниже.
SELECT comarea FROM companyarea 
    WHERE comarea NOT IN 
    (SELECT area FROM companyallot WHERE comname='24' AND zone='west' AND  
    location='mumbai') 
2

Заменить != с NOT IN оператора

SELECT COMAREA FROM COMPANYAREA WHERE COMAREA NOT IN (
     SELECT AREA 
     FROM COMPANYALLOT 
     WHERE COMNAME = '24' 
      AND ZONE = 'WEST' 
      AND LOCATION = 'MUMBAI' 
     ) 
1

NOT IN оператор работает отлично до тех пор, пока не NULL значение возвращается в суб-запроса, но все это идет грушевидную форму, как только есть даже одно нулевое значение в подзапросе.

Более безопасный вариант должен был бы использовать EXISTS/NOT EXISTS оператор, что-то вроде ...

select a.comarea 
from companyarea a 
where NOT EXISTS (select 1 
       from companyallot t 
       where t.comname='24' 
        and t.zone='west' 
        and t.location='mumbai' 
        and a.comarea = t.area) 
1

Вам нужно сделать две вещи, чтобы сделать его работу:

-> Используется многозначного оператор НЕ ВХОД (ИЛИ) В

-> Хотя ваш случай не указывает его, но всегда хорошо, если вы хорошо обрабатываете NULLS в продвинутом состоянии, используя NVL в результатах вашего внутреннего подзапроса.

-> НЕ СУЩЕСТВУЕТ Оператор должен все еще работать

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