让我们假设一个这样的Postgres表
CREATE TABLE example (
value_1 VARCHAR(255),
value_2 VARCHAR(255),
value_3 VARCHAR(255),
value_4 VARCHAR(255),
value_5 VARCHAR(255)
);
字符串
每一行的每一列都有不同的值,每一行都有相同的值,但在不同的列中。
INSERT INTO
example
VALUES
('a', 'b', 'c', 'd', 'e'),
('b', 'c', 'd', 'e', 'a'),
('c', 'd', 'e', 'a', 'b'),
('d', 'e', 'a', 'b', 'c'),
('e', 'a', 'b', 'c', 'd');
型
屈服
# SELECT * FROM example;
value_1 | value_2 | value_3 | value_4 | value_5
---------+---------+---------+---------+---------
a | b | c | d | e
b | c | d | e | a
c | d | e | a | b
d | e | a | b | c
e | a | b | c | d
(5 rows)
型
如何选择跨越多行的多个列之间的所有唯一值,以便只得到一个具有不同值'a'
,'b'
,'c'
,'d'
,'e'
的列列表?不知道每个值是否存在于每列中以及值的顺序。
3条答案
按热度按时间polhcujo1#
在阅读了@Andrei Odegov的
unnest
之后,看起来该函数可以返回多行。要从任何行或列返回唯一值:字符串
qvsjd97n2#
您有一个包含相关值的表,但在查询中您并不关心这些关系;您只想知道表中存在哪些值。
一种将所有值相同对待的方法是为每列编写一个查询,然后将结果合并:
字符串
5hcedyr03#
检查使用
unnest
数组函数的解决方案。但是像'ab', '', 'c', 'd', 'e'
这样的前导/尾随空格或数据呢?:字符串
结果如下:
型
在</>OneCompiler上试试。