使用包含以下列的表table1
:
name, dept, col1, col2, col3, col4, col5
我需要在多个列中找到具有相同值的行 - 例如col2, col3, col4, col5
虽然下面的内容可行,但我需要一种即使对于大量列也能工作的方法,而不必具有多个and
条件。
select *
from table1
where col2 = col3 and col3 = col4 and col4 = col5
答案 0 :(得分:2)
您可以这样做:
SELECT * FROM table1
WHERE (
SELECT COUNT(*) FROM (
SELECT DISTINCT UNNEST(ARRAY[col2, col3, col4, col5])
) tmp
) = 1;
这里的步骤如下:
答案 1 :(得分:2)
示例数据..
CREATE TABLE foo
AS
SELECT id,
trunc(random()*10) AS col1,
trunc(random()*10) AS col2,
trunc(random()*10) AS col3,
trunc(random()*10) AS col4
FROM generate_series(1,1e6)
AS gs(id);
ALL
此方法大大缩短,但您仍需要输入一次所有列名称。
SELECT * FROM foo
WHERE col1 = ALL(ARRAY[col2,col3,col4]);
SELECT format(
'SELECT * FROM foo WHERE %s;',
(
SELECT string_agg('col1 = col'||id, ' AND ')
FROM generate_series(2,4) AS id
)
);
答案 2 :(得分:0)
请尝试以下查询
SELECT * FROM table1 WHERE col2 IN(col3,col4,col5) OR col3 IN(col2,col4,col5) OR col4 IN(col3,col2,col5) OR col5 IN(col3,col4,col2);
如果需要任何更改,请告诉我。
答案 3 :(得分:0)