如何删除一行,其中我的一个字符串位于另一个字符串内

时间:2018-11-06 18:14:55

标签: sql-server

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

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

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

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

我正在使用游标,但是性能确实很差。

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找

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 |
+------------------+

这是您可以进行测试的 Demo

答案 1 :(得分:0)

如果您需要删除所有包含“ 1-2363”的记录,则可以使用以下查询。

--Run the below query and check the records first.
SELECT * FROM table_name WHERE ChainsOfNodes like '1-2363%'

--If above query return necessary records, you can run the below query to delete them
DELETE FROM table_name WHERE ChainsOfNodes like '1-2363%'

-如果需要保留最后一条记录,则可以使用以下查询。

DELETE FROM table_name WHERE ChainsOfNodes in  ('1-2363' , '1-2363-4665')