繁体   English   中英

如何根据特定列中的存在删除具有空白值的记录? - SQL

[英]How to remove records with blank values based on existence in specific column? - SQL

我想删除prevnext中所有具有空白值的记录 - 但仅适用于curr值仍然存在于其他地方的情况。 例如,

输入:

prev   curr   next   rand_value
       B             1231
       B             323
A      B             3232
       B      C      3233
       D             12313

Output:

prev   curr   next   rand_value
A      B             3232
       B      C      3233
       D             12313

到目前为止我的代码:

SELECT * 
FROM my_table
WHERE prev IS NOT NULL
OR next IS NOT NULL
-- but this doesn't catch the final row
-- maybe use something like EXISTS?

您可以使用NOT EXISTS

SELECT t1.* 
FROM tablename t1
WHERE t1.prev IS NOT NULL 
   OR t1.next IS NOT NULL
   OR NOT EXISTS (
        SELECT 1
        FROM tablename t2
        WHERE t2.curr = t1.curr AND (t2.prev IS NOT NULL OR t2.next IS NOT NULL)
      );

请参阅演示

每个唯一的 rand_value 将获得一个行号 1 到 X... 按上一个、下一个值排序。 如果两者都是“NULL”,它将获得 row_number 1。由于空值首先出现,我们必须分配一个降序。

也许一种方式....

WITH CTE AS (
SELECT *, row_number() over (partition by rand_value order by prev DESC, next DESC) RN
FROM my_table)

SELECT * FROM CTE WHERE RN =1

替代方法:获取所有不是 null 的,然后获取所有空联合...

SELECT * 
FROM my_table 
WHERE prev IS NOT NULL
   OR next IS NOT NULL  

UNION ALL

SELECT * 
FROM my_table
WHERE prev IS NULL
  AND next is NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM