MySQL Select语句where table1.id!= table2.id

时间:2010-04-14 11:27:50

标签: php mysql select join

我有一个包含帖子的数据表,然后我有一个单独的数据表,删除了帖子。删除帖子后会发生的情况是,它的ID被添加到已删除的表中,而不是删除帖子条目。

什么是从posts表中选择所有帖子而不选择已删除表中具有ID的帖子的一种干净有效的方法

3 个答案:

答案 0 :(得分:2)

在posts表中添加额外的列并删除存储和布尔值会不会更容易?或者如果要存储删除它的人,则使用整数字段(表示用户ID),0 =未删除。

答案 1 :(得分:2)

如果您无法更改表格,可以执行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 - 列上都有索引以获得最佳效果。

答案 2 :(得分:1)

如果你有充分的理由不像bigstylee建议的那样使用布尔标志,你可以使用EXISTS子查询:

SELECT * FROM table1 
  WHERE NOT EXISTS 
  (SELECT * FROM table2 WHERE table1.id=table2.id);