首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MySQL Select语句Where table1.id != table2.id

MySQL Select语句Where table1.id != table2.id
EN

Stack Overflow用户
提问于 2010-04-14 11:27:50
回答 3查看 2.1K关注 0票数 4

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-14 11:37:37

如果不能更改表,可以执行一个Left Join (这将在可能的情况下加入deleted_table ),然后检查id是否为Null (意味着没有找到任何行)。

代码语言:javascript
运行
AI代码解释
复制
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上都有索引,以获得最佳性能。

票数 2
EN

Stack Overflow用户

发布于 2010-04-14 11:32:03

将额外的列添加到posts表中,并存储和布尔值deleted,不是更容易吗?或者使用整型字段(表示用户id),如果您想存储谁删除了它,0=未删除。

票数 2
EN

Stack Overflow用户

发布于 2010-04-14 11:34:21

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

代码语言:javascript
运行
AI代码解释
复制
SELECT * FROM table1 
  WHERE NOT EXISTS 
  (SELECT * FROM table2 WHERE table1.id=table2.id);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2636905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文