我有一个名单 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 |
+----+--------+-----------+------+
答案 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中选择名称);
根据我的理解,认为这会给你解决方案。如果需要进一步的细节,请发表评论。
搜索答案更重要,因为它看起来像书/类中的问题。请尝试找到解决方案可以获得更多信息,如下面的链接