SQL查询连接中的所有记录是否与条件匹配?

Bin*_*gic 12 sql match

我有一个似乎是一个简单的问题,但无法通过SQL找出正确的解决方案.我特意使用postgresql.

请考虑以下事项:

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

这不符合我的需要.我想找到标签仅包含在列表中的用户.如果用户的标签不在列表中,则不应包括该用户.

'user1'标签:word1,word2,word3'user2
'标签:
word1'user3'标签:word1,word2

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

希望我明白这一点.谢谢你的帮助!

nyb*_*ler 6

依赖COUNT(*)= 2将要求在tags表中不能复制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) 
Run Code Online (Sandbox Code Playgroud)

  • 这*可能*包括没有标签的用户. (2认同)