请教一个 sql 查询的问题,对 where in 的结果集进行筛选,保留第一条

2022-03-10 23:32:31 +08:00
 fingers

环境:Mysql 对 where in 的结果集进行筛选,保留第一条

如:
select a,b,c from table where a in ("123","456","789");

结果:
123 1111 2222
123 1111 3333
456 1111 2222
456 1111 3333
789 1111 2222

需求:保留符合条件的第一条

123 1111 2222
456 1111 2222
789 1111 2222

请问大佬们,这种怎么查询能直接筛选出来,不用 delete

1116 次点击
所在节点    问与答
12 条回复
Carseason
2022-03-10 23:36:52 +08:00
子查询?
iseki
2022-03-10 23:42:43 +08:00
正常办法可以窗口查询,以 a 划分窗口保留第一条,歪办法可以调整 SqlMode 然后 group by (MySQL only)。也可以按某种规则聚合主键然后 join
Amber2011
2022-03-11 00:08:20 +08:00
select a,b,min(c) group by a ,b
sciel
2022-03-11 00:17:19 +08:00
limit 1 不就好了吗
fingers
2022-03-11 00:41:36 +08:00
@Amber2011 真实数据类型不是 int

@sciel limit 只取一条呀哥
@iseki 感谢大佬,还得研究下
liprais
2022-03-11 00:49:48 +08:00
什么叫第一条?
没有重复的你可以 min 之后 join 回去
有重复的你自己搞个变量算出来哪是第一条呗
c6h6benzene
2022-03-11 00:54:40 +08:00
ROW_NUMBER()开窗一下。
netnr
2022-03-11 08:45:38 +08:00
把 in 拆成单个等于 跟 limit 1
UNION ALL
下一个条件
Amber2011
2022-03-11 08:59:55 +08:00
@fingers 那就查符合条件的 min(id),然后套一层娃,用 id in
dddd1919
2022-03-11 09:25:12 +08:00
group by & order by
devinww
2022-03-11 09:33:25 +08:00
distinct 或者 group by
ikesnowy
2022-03-11 16:26:01 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX