sql - 从列表中选择未出现在查询结果中的条目

标签 sql postgresql postgresql-9.1

我使用 Postgres 9.1。我正在运行一个类似于

的查询
select count(distinct(user_id)) from users where user_id in (11,32,763,324,45,76,37,98,587);

此处 user_id 的列表包含 600 个条目。我得到的结果是 597。因此列表中有 3 个 user_id,它们不存在于 users 中。我如何知道这 3 个 user_id

请注意user_id不是users的主键

最佳答案

DISTINCT 只有在 user_id 未定义 UNIQUE 时才有意义。
对于您要求的查询,我们不需要任何一种方式:

SELECT t.user_id
FROM   unnest('{11,32,763,324,45,76,37,98,587}'::int[]) t(user_id)
LEFT   JOIN users u USING (user_id)
WHERE  u.user_id IS NULL;

如果表达式的两边都可以包含 NULL 值,请注意 NOT IN!具有长值列表的 IN/NOT IN 的扩展性也很差。

详细信息:

关于sql - 从列表中选择未出现在查询结果中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243310/

相关文章:

php - MySQL说: #1194 - Table 'tablename' is marked as crashed and should be repaired

sql - 有什么方法可以按文本列分组吗?

java - 使用 hibernate select 获取时间戳字段的错误时间

mysql - 如何将 MySQL `LIMIT` 子句转换为 PostgreSQL `LIMIT` 子句?

sql - 控制到达功能结束而没有 RETURN

postgresql-按每个元素中的单词对数组进行排序

postgresql - 低 Postgres 缓存命中率 - 数据大小或其他?

mysql - SQL查询获取2个日期之间每天的价格

mysql - 如果不使用另一个表作为 'SELECT' 语句,则检查表是否存在

javascript - PG Promise 未正确返回 "timestamp with time zone"字段