假设我有以下表格:
Id | QuestionId
----------------
1 | 'MyQuestionId'
1 | NULL
2 | NULL
2 | NULL
它应该是这样的
- 查找相同Id的所有结果
- 如果其中任何一个有QuestionId IS NOT NULL,不要触摸任何行与该Id。
- 仅当相同Id的所有结果都有QuestionId为NULL时,删除具有该Id的所有行。
所以在这种情况下,它应该只删除Id=2的行。
我在任何地方都没有找到这样的例子。我试过排序,计数,分组,但都不起作用。你能帮我吗?
您可以使用可更新的CTE或派生表,并使用窗口函数计算计数。
WITH cte AS (
SELECT t.*,
CountNonNulls = COUNT(t.QuestionId) OVER (PARTITION BY t.Id)
FROM YourTable t
)
DELETE cte
WHERE CountNonNulls = 0;
,db<的在小提琴
请注意,这个查询根本不包含任何自连接。