sql - 从第一个表中选择所有行,除了第二个表中的第一次出现
问题描述
我试图找出一种从第一个表中选择所有行的方法,除了行重复时第二个表中的第一次出现。
例如,
表格1:
ABC
ABC
DEF
GHJ
GHJ
表2:
ABC
GHJ
预期结果(来自第一个表):
ABC
DEF
GHJ
所以第一个 ABC 和第一个 GHJ 从第一个表中删除。
解决方案
你需要使用row_number()
来处理这个:
select t1.*
from (select col, row_number() over (partition by col order by col) as seqnum
from t1
) t1 left join
(select col, row_number() over (partition by col order by col) as seqnum
from t2
) t2
on t1.name = t2.name and t1.seqnum = t2.seqnum
where t2.name is null;
注意:这将返回任意名称。SQL 表表示无序集,因此表中没有“第一”行,除非列指定了排序。如果您有订购的想法,那么将其用于order by
.
此外,这允许重复,如果有的话t2
,所有这些都将被删除。t1
推荐阅读
- sql - 从每个 customer_id 的时间戳最大的表中选择所有数据
- keras - How to add the Count Vectorizer to Simple RNN model?
- r - y 轴上的长数学单位 (ggplt2)
- asp.net-core - 在视图中显示来自控制器的错误消息
- oracle-cloud-infrastructure - 创建时找不到始终免费的合格 VM 实例
- php - 如何创建EXCEL文件避免删除项目
- python - 如何从python上的PDF文件中提取单词的多个实例?
- android - 升级到 Android Gradle Plugin 4.2.0-beta03 后出现新的 Gradle 错误
- flutter - 来自 Stream 的参数
- 未在 MainPage 中收到
- firebase - 如何使用firebase和flutter with流实现分页并在streambuilder中使用它