小编典典

联接中所有记录都符合条件的SQL查询?

sql

我有一个看似简单的问题,但无法通过SQL找出正确的解决方案。我专门使用postgresql。

采取以下措施:

SELECT * FROM users INNER JOIN tags ON (tags.user_id = users.id) WHERE tags.name IN ('word1', 'word2')

这不能满足我的需求。我想查找其标签仅包含在列表中的用户。如果用户具有不在列表中的标签,则不应包括该用户。

‘user1’标签:word1,word2,word3’user2
‘标签:
word1’user3’标签:word1,word2

给定:word1和word2。我想准备一个返回“ user2”和“ user3”的查询。排除了“ user1”,因为它具有不在列表中的标记。

希望我明确了这一点。谢谢你的帮助!


阅读 170

收藏
2021-04-22

共1个答案

小编典典

依靠COUNT(*)= 2将要求标签表中不能有user_id和name的重复项。如果是这样,我会选择那条路线。否则,这应该起作用:

SELECT u.* 
FROM users AS u
WHERE u.id NOT IN (
    SELECT DISTINCT user_id FROM tags WHERE name NOT IN ('word1', 'word2')
) AND EXISTS (SELECT user_id FROM tags WHERE user_id = u.id)
2021-04-22