首页 > 解决方案 > 如何设计代码以删除无关值以维护表的主键

问题描述

我有一个表,其中主键是一组字段。姓名加年龄是主键但是还有一个名为成员资格的字段必须说是或否,但在某些情况下,对于这种组合,它有是和否这两个值都是不正确的,所以我需要以这样的方式设计查询,它应该删除一个当主键字段不存在时为“是”

桌子

Name -Xyz   age  20 membership yes 
Name Jkl    age  30 membership no
Name ABC    age  21 membership yes
Name ABC    age  21 membership no

在这种情况下,应该删除带有 yes 的 'ABC' 值,因为应该考虑带有 no 的 'ABC' 值

标签: sql

解决方案


您可以排序membership并保留找到的第一行,yes如果 ano存在则有效地丢弃 a。

例如:

select
  name, age, membership
from (
  select t.*,
    row_number() over(partition by name, age order by membership) as rn
  from t
) x
where rn = 1

结果:

name  age  membership
----  ---  ----------
-xyz   20  yes       
ABC    21  no        
jkl    30  no        

请参阅SQL Fiddle上的运行示例。


推荐阅读