下午遇到一个问题,IN子查询返回多个值。
网上查了很多文档,资料,都没收获。
问了技术群的同僚,竟然还被嘲笑了。IN 怎么可能匹配多个字段呢!
个人印象中曾经在哪里见到过,所以就觉得不服气。自己慢慢地去试,试出来了。
我们常用的IN 操作是这样的:
select * from tab t
where t.col1 in ('value1''value2');
但是如果是多个列的取值来自同一个子查询呢?
我们是不是要这样写了?
select * from tab1 t1
where t1.col1 in (select col1 from tab2)
and t1.col2 in (select col2 from tab2);
现在分享一种简便的方法给大家:
select * from tab t
where (t.col1,t.col2) in (select col1,col2 from tab2);
也就是这样的
select * from tab t
where (t.col1,t.col2) in (('value','value1'),('value','value2'));
我还不知道为什么网上的一些文档中为什么没有提到这种写法。
在这里写出来是想分享给大家,另外这也是自己的一个笔记。
如果对这方面比较熟悉的朋友,有不同的看法,还希望多多指教。
另外,**如果自己觉得是对的,自己动手努力实践出来。
当他人请教时,自己没有尝试成功之前,不要盲目否定。**