回答

收藏

使用LEFT JOIN(MySQL)时如何排除行

技术问答 技术问答 210 人阅读 | 0 人回复 | 2023-09-12

我的 用户    有很多 帖子
& |, X/ ]% b/ b3 q% F- |; V( y+ e。我想构建一个SQL查询,查询将在1个查询(无子查询)中执行以下操作,并希望在可能的情况下没有并集。我知道我可以用union要做到这一点,但我想知道是否只能用联系来做到这一点。# b  `  V* A4 m- [* V
我想得到以下不同活跃用户的列表:
! v( Q% [  P: G( X$ \0 }[ol]没有帖子9 u7 G  u# L( J0 R7 K) e7 E& a
没有批准的帖子[/ol]这是我到目前为止的内容:7 A. B: P, U# u* t' A( R
SELECT DISTINCT u.*FROM users u  LEFT JOIN posts p    ON p.user_id = u.id  LEFT JOIN posts p2    ON p2.user_id = u.idWHERE u.status = 'active'  AND (p.status IS NULL  OR p2.status != 'approved');问题是,当用户有多个帖子和一个帖子处于活动状态时。这仍然会回到我不想要的用户身边。如果用户有活跃的帖子,应该从结果中删除。你有什么想法吗?+ l7 j8 b2 [% v5 Q3 u' H4 F0 S
数据如下:8 k: F% U; Z* |
mysql> select * from users; ---- --------- | id | status  | ---- --------- |  1 | active  ||  2 | pending ||  3 | pending ||  4 | active  ||  5 | active  | ---- --------- 5 rows in set (0.00 sec)mysql> select * from posts; ---- --------- ---------- | id | user_id | status   | ---- --------- ---------- |  1 |       1 | approved ||  2 |       1 | pending  ||  3 |       4 | pending  | ---- --------- ---------- 3 rows in set (0.00 sec)答案应该只是用户4和5。4没有批准的帖子,5没有帖子。不应包括一个,该职位已获批准。
! F2 b3 T& h6 ?# l5 K4 e                                                                5 P6 j) v' ^6 c. _* d4 {; Q1 S
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则