首页 > 解决方案 > 如何删除一行,其中我的一个字符串在另一个字符串内

问题描述

我有这个问题,我正在 sql server 中建立一个节点链,但是我的一些链已经包含在其他链中:

ChainsOfNodes
1-2363
1-2363-4665
1-2363-4665-2359

例如链1-2363包含在链中1-2363-4665。我想删除该行,因为它已经包含在另一个链中。

有没有一种简单的方法可以使用删除语句删除这些行?

我正在使用游标,但性能真的很差。

提前致谢 !

标签: sql-server

解决方案


我想你正在寻找

CREATE TABLE T
    ([ChainsOfNodes] varchar(16));

INSERT INTO T
    ([ChainsOfNodes])
VALUES
    ('1-2363'),
    ('1-2363-4665'),
    ('1-2363-4665-2359');

DELETE T1
FROM  T T1 JOIN T T2 ON T2.ChainsOfNodes LIKE '%'+T1.ChainsOfNodes+'%'
WHERE T1.ChainsOfNodes <> T2.ChainsOfNodes;

SELECT *
FROM T;

回报:

+------------------+
|  ChainsOfNodes   |
+------------------+
| 1-2363-4665-2359 |
+------------------+

这是一个演示,您可以在其中进行测试。


推荐阅读