我有一个包含帖子的数据表,然后我有一个包含已删除帖子的单独数据表。当一个帖子被删除时发生的事情是,它的ID get被添加到已删除的表中,而不是删除帖子条目。
从帖子表中选择所有帖子,而不选择在已删除表中具有其ID的帖子,一种干净有效的方法是什么
发布于 2010-04-14 11:37:37
如果不能更改表,可以执行一个Left Join
(这将在可能的情况下加入deleted_table
),然后检查id
是否为Null
(意味着没有找到任何行)。
Select everything_you_need
From post_table p
Left Join delete_table d On ( d.id = p.id )
Where d.id Is Null;
确保在两个id
-columns上都有索引,以获得最佳性能。
发布于 2010-04-14 11:32:03
将额外的列添加到posts表中,并存储和布尔值deleted,不是更容易吗?或者使用整型字段(表示用户id),如果您想存储谁删除了它,0=未删除。
发布于 2010-04-14 11:34:21
如果您有充分的理由不像bigstylee建议的那样使用布尔标志,那么可以使用Existes子查询:
SELECT * FROM table1
WHERE NOT EXISTS
(SELECT * FROM table2 WHERE table1.id=table2.id);
https://stackoverflow.com/questions/2636905
复制相似问题