2011-06-16 69 views
1

我有批次和任務。在將一些任務分批到另一批次時,我想通過標記deleted = true來關閉所有現在爲空的批次。我試圖簡單地選擇使用加入只有沒有任務的批次。:只有在關係存在的情況下SQL更新

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

但這似乎並不奏效。

+1

如果兩個表中的ID列都被命名爲「id」,那麼您還需要向表/列引用添加別名。另外,您的批次ID是否與您的任務ID相同?因爲根據連接它看起來這樣,我猜這不是一對一的關係。 – Delebrin 2011-06-16 19:02:37

回答

2

更改爲外連接。內部連接將無法獲得不匹配。

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

* Facepalm。我不敢相信我沒有想到這一點。這幾乎是外連接是對的,對吧? – davidahines 2011-06-20 16:05:44

0

如果我沒有誤解你的問題,這是你在找什麼。

UPDATE tbl 
SET col=tbl.col 
FROM tbl 
INNER JOIN tbl1 ON tbl1.SomeCol=tbl.SomeCol 
WHERE ...... 
相關問題