SQL IN 子查询返回多个值

思考 同时被 3 个专栏收录
10 篇文章 0 订阅
4 篇文章 0 订阅
2 篇文章 0 订阅

下午遇到一个问题,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'));

我还不知道为什么网上的一些文档中为什么没有提到这种写法。

在这里写出来是想分享给大家,另外这也是自己的一个笔记。

如果对这方面比较熟悉的朋友,有不同的看法,还希望多多指教。


另外,**如果自己觉得是对的,自己动手努力实践出来。
当他人请教时,自己没有尝试成功之前,不要盲目否定。**

  • 7
    点赞
  • 0
    评论
  • 10
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

心随自在飞

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值