SQL Server 如果ID为的行已存在,则删除包含NULL的行

iqxoj9l9  于 2022-12-26  发布在  其他
关注(0)|答案(2)|浏览(168)

我有一个表如下所示。
如果在表中输入了带有说明的产品ID,我希望删除所有其他带有相同产品ID且说明为NULL的行,只留下带有说明的产品ID。在下表中,我希望删除ROW_ID = 1并保留ROW_ID = 2
此外,如果存在产品ID为NULL描述的行,但没有其他匹配的产品ID,我希望将该行保留在表中。在下表中,ROW_ID = 3保持不变。
| 行标识|产品标识|产品描述|时间戳|
| - ------| - ------| - ------| - ------|
| 1个|000001|零|2012年12月22日20时00分|
| 第二章|000001|项目描述|2012年12月23日21时00分|
| 三个|000002|零|2012年12月23日21时00分|
生成的表格如下所示:
| 行标识|产品标识|产品描述|时间戳|
| - ------| - ------| - ------| - ------|
| 第二章|000001|项目描述|2012年12月23日21时00分|
| 三个|000002|零|2012年12月23日21时00分|

uhry853o

uhry853o1#

假设表名为products,尝试类似下面的操作:

DELETE FROM products as p
WHERE p.product_description is null
AND EXISTS (
  SELECT * FROM products as p2 WHERE p2.product_id = p.product_id AND p2.product_description IS NOT NULL
);

如果subselect返回的行数大于0,则EXISTS运算符将返回true。

toe95027

toe950272#

你可以这样尝试:

WITH    cte
AS ( SELECT   * ,ROW_NUMBER() OVER ( PARTITION BY product_id order by time_stamp desc) as rn
    FROM     t)

DELETE FROM cte
WHERE  rn>1 and cte.product_description is null;

select * from t;

小提琴演示

相关问题