如何编写sql以找出表中没有的值?

时间:2010-09-16 06:42:02

标签: sql

我有一张桌子学生,我有一套20个名字。

使用他的sql

select name from student st where st.name in (
 'abc', 'xyz', . . .
)

我可以找到表格和集合中的所有学生姓名 现在,我怎样才能找出这20个名字中哪些不在学生表中。

6 个答案:

答案 0 :(得分:4)

我假设你自己想要这些名字。 一个选项是创建一个包含所有可用学生姓名的表,然后从中选择学生表中没有相应行的行,它看起来像这样 select name from student_names
where name not in (select name from students)

答案 1 :(得分:2)

CREATE TABLE student(name VARCHAR(255));
INSERT INTO student VALUES('a'), ('abc');
CREATE TABLE temp(x VARCHAR(255));
INSERT INTO temp VALUES('abc'), ('xyz');
SELECT x FROM temp WHERE 
  NOT EXISTS (SELECT * FROM student st WHERE st.name = x);

根据您使用的数据库,可能有一种更简单的方法。还有一种方法可以使用UNION。

答案 2 :(得分:0)

答案 3 :(得分:0)

select name from student where name not in (
select name from student st where st.name in (
 'abc', 'xyz', . . .
))

编辑:我可能找不到你要找的东西。请运行以下脚本并提供结果。

declare @student table
(
    name varchar(50)
)

insert into @student select 'james'
insert into @student select 'will'
insert into @student select 'bill'
insert into @student select 'adam'
insert into @student select 'jon'
insert into @student select 'white'
insert into @student select 'green'

select name from @student where name in ('james', 'will', 'bill')

select name from @student where name not in (select name from @student where name in ('james', 'will', 'bill'))

答案 4 :(得分:0)

DECLARE @names table ( name varchar(100) )
INSERT INTO @names VALUES ('abc')
...
INSERT INTO @names VALUES ('xyz')

SELECT name FROM @names WHERE name NOT IN ( SELECT DISTINCT Name FROM Student )

答案 5 :(得分:0)

假设您使用的工具可以生成动态sql,请尝试生成由您的用户名组成的内联视图 - 如下所示:

select 'abc' check_name union all
select 'xyz' check_name union all

...

(内联视图的语法可能取决于您使用的SQL版本 - 某些版本的SQL在不访问表的select语句中需要from [dummy_table]子句。)

然后使用此内联视图构造一个查询,并在student子句中不存在,如下所示:

select check_name from (
select 'abc' check_name union all
select 'xyz' check_name union all

...

) ilv where not exists
(select null from student st where st.name = ilv.check_name)