如何查询未删除帖子及存在交易记录的已删除帖子
解决方案
可以通过两种简洁的方式实现你的查询需求,以下是具体SQL语句及逻辑说明:
方法1:使用EXISTS子查询
SELECT p.* FROM Posts p WHERE p.deleted_at IS NULL OR EXISTS ( SELECT 1 FROM Transactions t WHERE t.post_id = p.id );
逻辑说明
p.deleted_at IS NULL:直接筛选出所有未被删除的帖子OR EXISTS (...):补充筛选出存在对应交易记录的已删除帖子,只要交易表中存在该帖子的记录,就会被纳入结果
方法2:使用LEFT JOIN结合DISTINCT
SELECT DISTINCT p.* FROM Posts p LEFT JOIN Transactions t ON p.id = t.post_id WHERE p.deleted_at IS NULL OR t.id IS NOT NULL;
逻辑说明
- 通过
LEFT JOIN关联帖子表与交易记录表,保留所有帖子的基础数据 p.deleted_at IS NULL筛选未删除的帖子t.id IS NOT NULL筛选出有对应交易记录的帖子(包含已删除的)DISTINCT用于避免单个帖子对应多条交易记录时出现重复输出
结果验证
针对你提供的测试数据:
- 帖子id=2:
deleted_at为空,会被第一个条件选中 - 帖子id=1:
deleted_at不为空,但交易表存在对应记录,会被第二个条件选中
最终结果会包含这两条帖子,完全符合预期。
内容的提问来源于stack exchange,提问作者user19228516
相关产品推荐
相关产品推荐

