如何查询TableX中指定ID是否存在于TableY并生成存在标识列
解决你的SQL查询问题
你原来的查询用了内连接,只会返回在TableY里有匹配的行,还会因为TableY的重复数据产生多条重复结果,根本拿不到TableX的全部行。要实现需求——给TableX每行加标记,判断TB_GO_ID或TB_RET_ID是否在TableY的TB_ID里,推荐用下面两种方法:
方法一:用EXISTS子查询(推荐,效率更高)
SELECT r.TB1_ID, CASE WHEN EXISTS ( SELECT 1 FROM TableY y WHERE y.TB_ID = r.TB_GO_ID OR y.TB_ID = r.TB_RET_ID ) THEN 'yes' ELSE 'FALSE' END AS Isexist FROM TableX r;
EXISTS会检查当前TableX行的两个ID是否在TableY里存在,找到匹配就立刻停止,不用扫完整个表。CASE根据检查结果输出对应的标记,保证每行只出一条结果。
方法二:用LEFT JOIN + DISTINCT
如果不习惯子查询,也可以用左连接配合去重:
SELECT DISTINCT r.TB1_ID, CASE WHEN y.TB_ID IS NOT NULL THEN 'yes' ELSE 'FALSE' END AS Isexist FROM TableX r LEFT JOIN TableY y ON y.TB_ID = r.TB_GO_ID OR y.TB_ID = r.TB_RET_ID;
- 左连接会保留TableX的所有行,匹配不到TableY的时候TB_ID会是NULL。
DISTINCT用来去掉因为TableY重复数据产生的重复行。
最终输出
不管用哪种方法,都会得到你要的结果:
TB1_ID Isexist 1 yes 2 yes 3 FALSE
内容的提问来源于stack exchange,提问作者coder11 b
相关产品推荐
相关产品推荐

