【发布时间】:2011-02-07 21:03:43
【问题描述】:
我有一个包含帖子的数据表,然后我有一个单独的数据表,其中删除了帖子。当一个帖子被删除时,它的 ID 被添加到已删除的表中,而不是删除帖子条目。
什么是从帖子表中选择所有帖子而不选择在已删除表中具有其 ID 的帖子的一种干净有效的方法
【问题讨论】:
我有一个包含帖子的数据表,然后我有一个单独的数据表,其中删除了帖子。当一个帖子被删除时,它的 ID 被添加到已删除的表中,而不是删除帖子条目。
什么是从帖子表中选择所有帖子而不选择在已删除表中具有其 ID 的帖子的一种干净有效的方法
【问题讨论】:
在您的帖子表中添加一个额外的列并存储和删除的布尔值不是更容易吗?或者如果你想存储谁删除它,可以使用一个整数字段(代表用户ID),0 = 未删除。
【讨论】:
如果您有充分的理由不使用 bigstylee 建议的布尔标志,则可以使用 EXISTS 子查询:
SELECT * FROM table1
WHERE NOT EXISTS
(SELECT * FROM table2 WHERE table1.id=table2.id);
【讨论】:
如果您无法更改您的表格,您可以执行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-列上都有索引以获得最佳性能。
【讨论】: