2

我有两张桌子:

CREATE TABLE  "status" (
    "id" integer NOT NULL PRIMARY KEY,
    "created_at" datetime NOT NULL,    
    "updated_at" datetime NOT NULL);


CREATE TABLE "device" (
    "id" integer NOT NULL PRIMARY KEY,
    "created_at" datetime NOT NULL,
    "updated_at" datetime NOT NULL,
    "last_status_object_id" integer REFERENCES "status" ("id"));

在“设备”表中,last_status_object_id 引用 status.id。

我想删除“last_status_object_id”未引用的所有状态行。我似乎无法弄清楚如何做到这一点。谁能帮我吗?

4

3 回答 3

4
DELETE
    status
FROM
    status
    LEFT JOIN device ON (status.id = last_status_object_id)
WHERE
    device.id IS NULL
于 2013-10-23T15:17:44.210 回答
2
delete from status
where id not in (select last_status_object_id
                            from device);

我们开始吧,在sqlfiddle中有演示

于 2013-10-23T15:18:52.840 回答
1

我想删除“last_status_object_id”未引用的所有状态行。

一种简单的表达方式是使用NOT EXISTS

DELETE FROM 
    status
WHERE
    NOT EXISTS (SELECT * FROM device WHERE last_status_object_id = status.id)
于 2013-10-23T15:39:16.620 回答