SQL-按关系筛选

SQL-按关系筛选,sql,join,relationship,Sql,Join,Relationship,我有3个DB表: users: id, name posts: id, user_id, content post_likes: id, user_id, post_id 我想获取我所有用户的喜欢,除了我在帖子上做的喜欢。换句话说:把我所有喜欢的东西都放到别人的帖子上 当我实际获取post\u likes时,如何按关系的列posts.user\u id进行筛选?尝试以下操作: SELECT * FROM users u INNER JOIN post_likes pl ON (u.user

我有3个DB表:

users: id, name

posts: id, user_id, content

post_likes: id, user_id, post_id
我想获取我所有用户的喜欢,除了我在帖子上做的喜欢。换句话说:把我所有喜欢的东西都放到别人的帖子上


当我实际获取
post\u likes
时,如何按关系的列
posts.user\u id
进行筛选?

尝试以下操作:

SELECT *
FROM users u
INNER JOIN post_likes pl ON (u.user_id = pl.user_id)
INNER JOIN posts p ON (p.id = pl.post_id AND p.user_id <> u.id)
WHERE u.id = ...
选择*
来自用户u
内部连接post\u like pl ON(u.user\u id=pl.user\u id)
内部连接posts p ON(p.id=pl.post\u id和p.user\u id)
其中u.id=。。。
试试这个

SELECT * FROM post_likes pl
LEFT JOIN posts p ON pl.post_id=p.id
WHERE pl.user_id = 3 AND p.user_id != 3

您正在寻找用户3的帖子,其中帖子id不代表他自己的帖子(即,帖子id不在他自己的帖子id集中):

你可以试试这个

SELECT * FROM post_likes pls 
INNER JOIN posts p ON pls.post_id=p.id
WHERE pls.user_id = 3 AND p.user_id != 3

这应该是一个内部连接。左连接在这里没有意义。此外,当您通过比较
p.user\u id!=3
SELECT * FROM post_likes pls 
INNER JOIN posts p ON pls.post_id=p.id
WHERE pls.user_id = 3 AND p.user_id != 3