我有一个看似简单的问题,但无法通过 SQL 找出正确的解决方案。我专门使用postgresql。
采取以下措施:
SELECT *
FROM users INNER JOIN tags
ON (tags.user_id = users.id)
WHERE tags.name IN ('word1', 'word2')
这不符合我的需要。我想找到标签仅包含在列表中的用户。如果用户的标签不在列表中,则不应包含该用户。
“用户1”标签:word1、word2、word3
“user2”标签:word1
“user3”标签:word1、word2
给定:word1 和 word2。我想准备一个返回“user2”和“user3”的查询。 “user1”被排除,因为它具有不在列表中的标签。
希望我说清楚了。感谢您的帮助!
依赖 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)