我有一张桌子学生,我有一套20个名字。
使用他的sql
select name from student st where st.name in (
'abc', 'xyz', . . .
)
我可以找到表格和集合中的所有学生姓名 现在,我怎样才能找出这20个名字中哪些不在学生表中。
答案 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)
SELECT NOT IN?
postgresql:http://archives.postgresql.org/pgsql-sql/2002-08/msg00322.php
答案 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)