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

2022 年 3 月 10 日
 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

1971 次点击
所在节点    问与答
12 条回复
Carseason
2022 年 3 月 10 日
子查询?
iseki
2022 年 3 月 10 日
正常办法可以窗口查询,以 a 划分窗口保留第一条,歪办法可以调整 SqlMode 然后 group by (MySQL only)。也可以按某种规则聚合主键然后 join
Amber2011
2022 年 3 月 11 日
select a,b,min(c) group by a ,b
apple2026
2022 年 3 月 11 日
limit 1 不就好了吗
fingers
2022 年 3 月 11 日
@Amber2011 真实数据类型不是 int

@sciel limit 只取一条呀哥
@iseki 感谢大佬,还得研究下
F281M6Dh8DXpD1g2
2022 年 3 月 11 日
什么叫第一条?
没有重复的你可以 min 之后 join 回去
有重复的你自己搞个变量算出来哪是第一条呗
c6h6benzene
2022 年 3 月 11 日
ROW_NUMBER()开窗一下。
netnr
2022 年 3 月 11 日
把 in 拆成单个等于 跟 limit 1
UNION ALL
下一个条件
Amber2011
2022 年 3 月 11 日
@fingers 那就查符合条件的 min(id),然后套一层娃,用 id in
dddd1919
2022 年 3 月 11 日
group by & order by
devinww
2022 年 3 月 11 日
distinct 或者 group by
ikesnowy
2022 年 3 月 11 日

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

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

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

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

© 2021 V2EX