SQL 服务器:删除没有父项的行(基于 2 列连接)

SQL Server: delete rows which does not have a parent (based on 2 columns join)

我正在尝试从没有父项(位置)的子项 table(事故)中删除条目。如果我理解正确,如果我想在这两个 table 之间创建关系(one 到 one/many 而不是 one/zero 到 one/many 我现在有)。外键是 fk_veld5 和 jaar 的组合。这就是我试图解决它的方法:

DELETE FROM accidents 
WHERE FK_veld5 IN 
  (SELECT fk_veld5, Jaar_vkl FROM accidents
   EXCEPT SELECT FK_VELD5, JAAR FROM locations) 
 AND Jaar_vkl IN
  (SELECT fk_veld5, Jaar_vkl FROM accidents
   EXCEPT Select FK_VELD5, JAAR FROM locations)
GO

方括号中的选择包含我要删除的行中的 fk_veld5 和 Jaar_vkl(我没有成功 select 我要删除的完整行)。

在 运行 上面的查询之后我得到这个错误:

Msg 116, Level 16, State 1, Line 24 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

我也尝试过使用 EXISTS,但没有用。

我试图找到解决方案,但每次尝试都以错误告终。如果我想做的是可能的,你能回答我吗?或者我应该使用 LEFT JOIN 来 select 所有具有位置的事故并将它们保存到新的 table 最终将替换旧的事故 table?

您的查询不正确,当您使用 IN caluse

时,sub select 应该只有 return 一列

试试这个

;with cte as
(
   SELECT fk_veld5, Jaar_vkl FROM accidents
   EXCEPT 
   Select FK_VELD5, JAAR FROM locations
)
DELETE a FROM accidents a
INNER JOIN CTE B on a.FK_veld5 = b.FK_veld5 and a.Jaar_vkl = b.Jaar_vkl
DELETE
  accidents
FROM
  accidents AS a
LEFT JOIN
  locations AS l
  ON a.fk_veld5 = l.FK_VELD5
  AND a.Jaar_vkl = l.JAAR
WHERE
  l.FK_VELD5 IS NULL