a b c d e f
和表二包含
b c d e f g h i j k l
我想显示表2中的数据,不应在表1中使用数据(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
的表中未使用的区域答案 0 :(得分:2)
在Where where" ="运营商将处理单一价值,"在"运算符将处理多个值。所以不要使用!= use"而不是"运算符如下。
SELECT comarea FROM companyarea
WHERE comarea NOT IN
(SELECT area FROM companyallot WHERE comname='24' AND zone='west' AND
location='mumbai')
答案 1 :(得分:1)
将!=
替换为NOT IN
运算符
SELECT COMAREA FROM COMPANYAREA WHERE COMAREA NOT IN (
SELECT AREA
FROM COMPANYALLOT
WHERE COMNAME = '24'
AND ZONE = 'WEST'
AND LOCATION = 'MUMBAI'
)
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
你需要做两件事才能让它发挥作用:
- >使用多值运算符NOT IN(OR)IN
- >虽然你的情况没有指明它,但是如果你通过在内部子查询结果中使用NVL来提高NULLS,那么总是很好。
- > NOT EXISTS操作员仍然可以工作