表中不存在的行

时间:2015-06-24 09:53:29

标签: sql postgresql

我有一个名单 John,Rupert,Cassandra,Amy 的名单,我想得到表中不存在的名字: Cassandra,Amy

我该如何撰写此类查询?

我的表:

+----+--------+-----------+------+
| id | name   | address   | tele |
+----+--------+-----------+------+
|  1 | Rupert | Somewhere | 022  |
|  2 | John   | Doe       | 029  |
|  3 | Donald | Armstrong | 021  |
|  4 | Bob    | Gates     | 022  |
+----+--------+-----------+------+

3 个答案:

答案 0 :(得分:2)

成套思考。使用UNION ALL向结果集添加名称时,可以使用EXCEPT从结果集中删除名称。

select 'John'
union all
select 'Rupert'
union all
select 'Cassandra'
union all
select 'Amy'
except
select name from mytable;

答案 1 :(得分:1)

建立一个要检查的名称列表,然后左键加入users表:

with to_check (name) as (
   values 
     ('John'), ('Rupert'), ('Cassandra'), ('Amy')
)
select tc.name as missing_name
from to_check tc
  left join the_table tt on tt.name = tc.name
where tt.name is null;

SQLFiddle示例:http://sqlfiddle.com/#!15/5c4f5/1

答案 2 :(得分:0)

希望你的列表以表格的形式让它成为表格b和原始表格 现在SQL查询就像它一样

从名称不在的地方选择名称(从b中选择名称);

根据我的理解,认为这会给你解决方案。如果需要进一步的细节,请发表评论。

搜索答案更重要,因为它看起来像书/类中的问题。请尝试找到解决方案可以获得更多信息,如下面的链接

How to write "not in ()" sql query using join