仅当关系存在时才更新SQL

仅当关系存在时才更新SQL,sql,Sql,我有批次和任务。在将一些任务批处理到另一批中时,我希望通过标记deleted=true来关闭所有现在为空的批。我尝试仅使用联接选择没有任务的批次: SELECT id FROM batches INNER JOIN tasks on batches.id = tasks.batch_id where count(tasks.id) > 0 但这似乎不起作用。更改为外部联接。内部联接无法获取非匹配项 SELECT id FROM batches LEFT JOIN tasks on ba

我有批次和任务。在将一些任务批处理到另一批中时,我希望通过标记deleted=true来关闭所有现在为空的批。我尝试仅使用联接选择没有任务的批次:

SELECT id FROM batches INNER JOIN tasks on batches.id = tasks.batch_id where count(tasks.id) > 0 

但这似乎不起作用。

更改为外部联接。内部联接无法获取非匹配项

SELECT id FROM batches LEFT JOIN tasks on batches.id = tasks.id where tasks.id is null

如果我没有误解你的问题,这就是你要找的

UPDATE tbl
SET col=tbl.col
FROM tbl 
INNER JOIN tbl1 ON tbl1.SomeCol=tbl.SomeCol
WHERE ......

如果两个表中的ID列都命名为“ID”,则还需要向表/列引用添加别名。另外,批处理ID是否与任务ID相同?因为根据join,它看起来是这样的,我猜这不是一对一的关系。*Facepalm。真不敢相信我居然没想到。。这就是外连接的作用,对吗?