在我的道路图中,我刚好有一个长度为3的自行车。我正在尝试删除循环中从A-B和B-A出发的道路。如果我删除一条道路,它将删除该循环,并将我的图形变成一棵树。通过使用 with 语句,我可以找到一条能做到这一点的道路。但是,我想根据发现的内容从原始表中删除,但似乎无法在代码中使用delete语句。我听说过“ joins”,但是我不确定如何在这里使用它,并希望得到一些建议。
以下代码找到了多条长度为3的循环的道路,但我将其限制为1,因为我只想删除一条道路。
%%sql
with cycle as(
select s1.A as s1, s3.A as s3
from streets s1, streets s2, streets s3
where s1.B = s2.A and s2.B = s3.A and s3.B = s1.A
limit 1)
select A, B
from streets, cycle
where (s1 = A and s3 = B) or (s3 = A and s1 = B)
返回:
我想删除原始表中与A和B值匹配的两行,从而删除GadgetCo和Thing Industries之间的路
答案 0 :(得分:2)
您可以在exists
子句中将where
用于匹配条件:
with cycle as (
select s1.A as s1, s3.A as s3
from streets s1 join
streets s2
on s1.B = s2.A join
streets s3
on s2.B = s3.A and s3.B = s1.A
limit 1
)
delete from streets
where exists (select 1
from cycle c
where (streets.A = c.s1 and streets.B = c.s3) or
(streets.A = c.s3 and streets.B = c.s1)
);
请注意,我用正确的,显式的标准 JOIN
语法替换了隐式联接。