SQL:对于每一行,检查涉及该行元素的条件

SQL: For each row, check a condition involving an element of that row

我希望按照以下方式做一些事情:

对于 table 中的每一行,检查是否有 children(这是通过选择 parentid 等于当前元素的 id 的所有元素来完成的)。如果什么都没有显示,则没有 children 并且 parent 需要删除。这个parentid需要来自当前元素的id。

我在想一些事情(在 pseudo-code-ish 中):

DELETE FROM table WHERE ((SELECT * FROM table WHERE parentid = id) IS NULL)

理想情况下,我会为每个循环执行一次,并为当前 ID 创建一个变量(注意我是用 C# 编写的)以用于 parentid 搜索。

我想我可能忽略了一种更简单的方法... 有没有更简单的方法来实现这个?如果不是,我的方法是否正确,我如何将其转换为 SQL?

无论如何,我们将不胜感激。

不确定这是否是正确的语法,但您正在寻找的是所有 parentid 的列表 - 这可以通过获取所有 parentidtable 查询从它的价值。获得此列表后,您想删除其中 不属于 并且没有自己的 parentid 的所有项目:

DELETE FROM table
WHERE id NOT IN
(
  SELECT parentid FROM table
)
AND parentid IS NULL -- assumption: parents do not have a parent id

选择没有子行 not exists():

--delete t
select *
from tbl t
where not exists (
  select 1
  from tbl i
  where t.id = i.parentid
  )