我正在研究一个项目,我有一个需要检查的数千条记录的列表。我需要提供未找到的列表,并提供我用来查找它们的查询,以便我的上级可以检查他们的工作。
我承认我对SQL比较陌生。我无权创建临时表,这是我想到的一种方法。
我正在做的基本想法:
select t.column1, t.column2
from table1 t
where t.column1 in ('value1','value2','value3')
如果value1和value3在数据库中,但value2不在,我需要显示value2而不是其他。
我已尝试ISNULL
,嵌入查询,并尝试从查询中选择NOT
值。
我搜索了在Google和此网站上的查询中找不到的返回记录,但仍未找到任何内容。
答案 0 :(得分:2)
我尝试过类似的东西:
首先创建一个包含所需的所有值的表。
让我们说
create table table_values(values varchar2(30));
然后尝试如下的in子句:
select * from table_values tv where tv.value not in (select t.column1
from table1 t);
这将返回所需的值。
答案 1 :(得分:1)
在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
注意:
v(value)
是指定给表的别名和列名。v
的值t1.column1 is null
v
中的列。删除column2因为它始终为null 答案 2 :(得分:0)
解决方案可能适用于Oracle,其中dual是单行单列表。你需要 一个表,您可以在其中虚拟选择所需的值!
警告因为我无权访问db我从未在下面测试过查询。
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的 SELECT value1 FROM dual是 SELECT value1或SELECT'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的人可能就是这样 RichardTheKiwi版本的Oracle选择来自双核更好。