首页 新闻 会员 周边 捐助

mysql如何查询出给定范围里表中不存在的数据

0
悬赏园豆:50 [已解决问题] 解决于 2017-08-07 14:49

案例:

表test 中有数据1,2,3   给定一个集合1,4   查询集合里在表中存在的数据sql为:select * from test where id in (1,4);   

如何查询出集合里在表中不存在的数据(查询出4)

ps:只读数据库,而且只能通过sql实现

登顶的主页 登顶 | 初学一级 | 园豆:52
提问于:2017-08-03 10:26
< >
分享
最佳答案
0

select 1,4;出现的是一整行的数据

可以使用union将行转为列,

select 1 as id UNION select 4 as id;

然后进行查询:

select * from
(select 1 as id UNION select 4 as id) s
where s.id NOT in (select id from test);

但是如果集合里的数据多,行转列很麻烦。。。

现在问题就成了如何将a,b,c,d变成:

a
b
c
d

登顶 | 初学一级 |园豆:52 | 2017-08-03 11:13

目前先用这种方式处理。如果给出的集合数据量大,可先使用文本编辑器,写好union sql;然后在数据库中执行。如果大家有更好的整行转整列的方法,希望大家解惑一下。

 

另外一种此类问题的解决方式,查询出来结果后使用excel进行去重或者删除重复处理,也是一种解决思路

登顶 | 园豆:52 (初学一级) | 2017-08-07 14:53
其他回答(4)
0

参考 http://www.cnblogs.com/caoruiy/p/4485273.html

把你的集合当作变量传进sql函数中

hahanonym | 园豆:1460 (小虾三级) | 2017-08-03 10:36

mysql函数,能够设置不定参数吗,集合中的个数不定啊

函数内部具体怎么实现了,难道是遍历集合,依次查询,这样不是会查询很多遍。

麻烦指教!!3q

支持(0) 反对(0) 登顶 | 园豆:52 (初学一级) | 2017-08-03 11:07

@登顶: 对应的应该叫带参数的表值函数,同时把你的集合当作一个table传进函数,然后就可以把集合当作数据表处理。那就是两个表的查询然后返回数据表。具体语法自己查一下。

支持(0) 反对(0) hahanonym | 园豆:1460 (小虾三级) | 2017-08-03 11:50
0

写mysql函数吧

会长 | 园豆:12461 (专家六级) | 2017-08-03 11:45
1

写个函数,吧arr转成临时table

然后

临时table as a left join 数据库表 as b on a.id=b.id and b.id is null

收获园豆:50
czd890 | 园豆:14482 (专家六级) | 2017-08-03 13:21

现在就是卡在了arr转成临时table

支持(0) 反对(0) 登顶 | 园豆:52 (初学一级) | 2017-08-03 16:14

@登顶: http://www.cnblogs.com/Jessy/archive/2011/07/28/2119192.html

支持(0) 反对(0) czd890 | 园豆:14482 (专家六级) | 2017-08-05 21:27
0

select * from test where id not in (1,2,3);   

 

苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-03 13:30

oh, sorry 理解错了,  用楼上的办法可以,

支持(0) 反对(0) 苍枫露雨 | 园豆:1027 (小虾三级) | 2017-08-03 13:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册