假设我有一个值列表
'A', 'B', 'C','D','E',...,'X'.
我有一个数据库列CHARS
,其中存储着'C'
和'E'
之外的列表的确切值(一个值/行)。因此,CHARS
包含'A', 'B', 'D',..., 'X'
。
PostgreSQL中是否有一种方法只返回'C'
和'E'
的行;我的列表中CHARS
列中缺少的值?
答案 0 :(得分:1)
如果您的值列表来自数据库外部(例如程序),则最简单的解决方案应该是NOT IN
运算符
SELECT * FROM your_table WHERE chars NOT IN ('A', 'B', 'C', 'D', 'E', ..., 'X')
(注意:元组中缺少的字符不能用...
缩写。因此,您已经全部写了。)
如果您的值列表来自表或查询,则可以使用子查询:
SELECT * FROM your_table WHERE chars NOT IN (SELECT a_char FROM another_table WHERE ...);
答案 1 :(得分:1)
您可以对values子句进行外部联接:
select i.ch as missing_character
from (
values
('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ..., ('X')
) as i(ch)
left join the_table t on i.ch = t.chars
where t.chars is null
order by i.ch;
请注意,每个字符都必须放在values
子句的括号中,以确保每个字符都是一行。
或者,您可以使用EXCEPT运算符:
select ch
from (
values ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ... , ('X')
) as i(ch)
except
select chars
from the_table
order by ch