我有这个问题,我在sql server中建立了一个节点链,但是我的一些链已经包含在其他链中:
ChainsOfNodes
1-2363
1-2363-4665
1-2363-4665-2359
例如,链1-2363
包含在链1-2363-4665
中。
我想删除该行,因为它已经包含在另一个链中。
有没有一种简单的方法可以使用删除语句删除这些行?
我正在使用游标,但是性能确实很差。
谢谢!
答案 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')