我希望所有不符合条件的用户

时间:2019-12-05 13:14:32

标签: sql postgresql

我想让tag_it不等于10的所有用户

用户表:

id | firstname  | lastname
1  | John       | Doe
2  | Test       | User
3  | Hello      | World

user_tags表:

id | tag_id     | user_id      
1  | 10         | 1    
2  | 10         | 2     
3  | 11         | 2     

这就是我正在尝试的

SELECT
    users.id
FROM
    users
    JOIN user_tags ut ON ut.user_id = users."id"
    AND ut.tag_id <> 10
WHERE
    users.id IN (1,2,3)

预期输出为3。

2 个答案:

答案 0 :(得分:2)

尝试一下:

SELECT *
FROM users u
WHERE NOT EXISTS(
    SELECT 'X'
    FROM user_tags ut
    WHERE ut.user_id = u.id
    AND ut.tag_id = 10
)

答案 1 :(得分:1)

可以用JOIN完成。恕我直言,不存在是一个更好的解决方案,但不是必需的。

select id
  from (select u.id,ut.tag
          from users   u
          left join user_tag ut
            on u.id = ut.user_id 
                and ut.tag = 10
          where u.id in (1,2,3) 
       ) uut
where tag is null;