Select 个列表中未出现在查询结果中的条目
Select entries from a list that do not occur in the query result
我使用 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;
当心 NOT IN
如果 NULL 值可以包含在表达式的两边! IN
/ NOT IN
长值列表的扩展性也很差。
详情:
- Optimizing a Postgres query with a large IN
- Select rows which are not present in other table
我使用 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;
当心 NOT IN
如果 NULL 值可以包含在表达式的两边! IN
/ NOT IN
长值列表的扩展性也很差。
详情:
- Optimizing a Postgres query with a large IN
- Select rows which are not present in other table