Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回查询中未找到的值_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql 返回查询中未找到的值

Sql 返回查询中未找到的值,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我正在做一个项目,我有一个几千条记录的列表,我需要检查。我需要提供未找到的列表,并提供我用来定位它们的查询,以便我的上级可以检查他们的工作 我承认我对SQL比较陌生。我没有创建临时表的权限,这是我想到的一种方法 我正在做的基本想法: select t.column1, t.column2 from table1 t where t.column1 in ('value1','value2','value3') 如果value1和value3在数据库中,但value2不在,则我需要显示value

我正在做一个项目,我有一个几千条记录的列表,我需要检查。我需要提供未找到的列表,并提供我用来定位它们的查询,以便我的上级可以检查他们的工作

我承认我对SQL比较陌生。我没有创建临时表的权限,这是我想到的一种方法

我正在做的基本想法:

select t.column1, t.column2
from table1 t
where t.column1 in ('value1','value2','value3')
如果value1和value3在数据库中,但value2不在,则我需要显示value2,而不是其他

我尝试了
ISNULL
,嵌入查询,并尝试从查询中选择
NOT


我在Google和本网站上搜索了在查询中未找到的返回记录,但仍然没有找到任何结果。

解决方案可能适用于Oracle,其中dual是单行单列表。你需要 一个表格,您可以在其中虚拟选择所需的值

警告,因为我没有访问数据库的权限,我从未测试过下面的查询。

SELECT tab_all.col_search, t.column1, t.column2
FROM
(
   Select value1 AS col_search from dual
   union all
   Select value2 from dual
   union all
   Select value3 from dual
) tab_all left join  table1 t
on col_search = t.column1
WHERE t.column1 is null;
我相信sqlserver相当于Oracle 从dual is中选择值1 选择value1或选择“value1”

所以试试看

SELECT tab_all.col_search, t.column1, t.column2
FROM
(
   Select value1 AS col_search
   union all
   Select value2 AS col_search
   union all
   Select value3 AS col_search
) tab_all left join  table1 t
on col_search = t.column1
WHERE t.column1 is null;
因为我不是sqlserver,所以可能是这样的人
Richard Kiwi版本的Oracle select from dual更好。

我也尝试过类似的方法:

首先创建一个表,该表将包含您需要的所有此类值

比方说

create table table_values(values varchar2(30));
然后尝试以下in子句:

select * from table_values tv where tv.value not in (select t.column1
from table1 t);

这将返回所需的值。

在SQL Server 2008中,您可以使用语法
values(…)(…)(…)
创建派生表,例如

    select v.value
      from (
           values ('value1'),('value2'),('value3')
           ) v(value)
 left join table1 t on t.column1 = v.value
     where t1.column1 is null
注:

  • 每个(…)after值都是一行,可以有多个列
  • 派生表后面的
    v(value)
    是表的别名和列名
  • LEFT JOIN保留派生表
    v
    中的值,即使该记录在表1中不存在
  • 然后,我们只保留无法匹配的记录,即
    t1.column1为空
  • 我已将select中的第一列从
    v
    切换到该列。列2已删除,因为它始终为空

  • 您可以在服务器上创建什么完整的表、视图、存储过程等等,。。?它是什么类型的sql?从表1 t中选择t.column1、t.column2,其中t.column1不在('value1'、'value2'、'value3')中是否适合您?如果你只有数千个条目,你可以把它们放在这样的列表中。公平地说,这是SQLServer2008R2。我应该指定我们只限于T-SQL。我只限于选择、更新、插入和删除,我不能访问存储过程(尽管我已经找到了解决方法),不能创建视图或表。在第一篇文章中,他提到没有tmp表!