案例:
表test 中有数据1,2,3 给定一个集合1,4 查询集合里在表中存在的数据sql为:select * from test where id in (1,4);
如何查询出集合里在表中不存在的数据(查询出4)
ps:只读数据库,而且只能通过sql实现
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
目前先用这种方式处理。如果给出的集合数据量大,可先使用文本编辑器,写好union sql;然后在数据库中执行。如果大家有更好的整行转整列的方法,希望大家解惑一下。
另外一种此类问题的解决方式,查询出来结果后使用excel进行去重或者删除重复处理,也是一种解决思路
参考 http://www.cnblogs.com/caoruiy/p/4485273.html
把你的集合当作变量传进sql函数中
mysql函数,能够设置不定参数吗,集合中的个数不定啊
函数内部具体怎么实现了,难道是遍历集合,依次查询,这样不是会查询很多遍。
麻烦指教!!3q
@登顶: 对应的应该叫带参数的表值函数,同时把你的集合当作一个table传进函数,然后就可以把集合当作数据表处理。那就是两个表的查询然后返回数据表。具体语法自己查一下。
写mysql函数吧
写个函数,吧arr转成临时table
然后
临时table as a left join 数据库表 as b on a.id=b.id and b.id is null
现在就是卡在了arr转成临时table
@登顶: http://www.cnblogs.com/Jessy/archive/2011/07/28/2119192.html
select * from test where id not in (1,2,3);
oh, sorry 理解错了, 用楼上的办法可以,