SQLite DELETE 使用 WITH 语句
SQLite DELETE using WITH statement
我的道路图中正好有一个长度为 3 的循环。我试图删除一条从 A-B 到 B-A 的道路,这是循环的一部分。如果我删除一条路,它将删除循环并使我的图形成为一棵树。通过使用 with 语句,我能够找到实现该目的的道路。但是,我想根据我发现的内容从原始 table 中删除,但我似乎无法在我的代码中使用 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)
Returns:
我想删除原来 table 中与这些 A 和 B 值匹配的两行,从而删除 GadgetCo 和 Thing Industries 之间的道路
where
子句中的匹配条件可以使用exists
:
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
语法替换了隐式连接。
我的道路图中正好有一个长度为 3 的循环。我试图删除一条从 A-B 到 B-A 的道路,这是循环的一部分。如果我删除一条路,它将删除循环并使我的图形成为一棵树。通过使用 with 语句,我能够找到实现该目的的道路。但是,我想根据我发现的内容从原始 table 中删除,但我似乎无法在我的代码中使用 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)
Returns:
我想删除原来 table 中与这些 A 和 B 值匹配的两行,从而删除 GadgetCo 和 Thing Industries 之间的道路
where
子句中的匹配条件可以使用exists
:
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
语法替换了隐式连接。