我得到“子查询返回多个值”,而对我的SELECT子查询

问题描述 投票:0回答:1

我有我没有访问到修改一个观点,我不得不做出这样使我行巫某列SELECT查询为空(空,不为空)

在这种观点,我有:

Oid| Name | Email | Phone 

在这种观点的记录总数超过98万行。

这是我的尝试:

SELECT DISTINCT * FROM View WHERE Phone = '' 

SELECT DISTINCT * FROM View  WHERE datalength(Phone)<1

SELECT DISTINCT * FROM View  WHERE Len(Phone)<1

在所有这些我得到的错误:

[Err] 21000 - [SQL Server]Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

如果我做一个SELECT没有试图让空行形成了“电话”它的工作原理,我也尝试过检查,如果一些的Oid用重复:

SELECT
    Oid, COUNT(*)
FROM
    View
GROUP BY
    Oid
HAVING 
    COUNT(*) > 1

但我没有得到任何结果(不重复)

有趣的是,如果我做一个TOP 1000(发现在手机空的),它的工作原理,所以我不明白发生了什么。

我做错了吗?

sql sql-server
1个回答
0
投票

由于评论暗示这里的问题将在视图中。什么可能不会立即明显的是,从视图读取执行计划可能大相径庭取决于你采用什么样的条件。在这种情况下,我假设由子查询产生的电话。该视图将假设子查询只返回一行。如果您查询视图没有电话,从来没有进行子查询。

如果需要手机,然后进行子查询,从而导致错误。

尝试与执行计划运行这些开启,并应帮助您了解其中的问题所在。

这是功能,您可以好好利用的,我用它定期向有条件的依赖于参数表的连接。

© www.soinside.com 2019 - 2024. All rights reserved.