在PostgreSQL中查询多列特定值

5

我在我的数据库(postgres)中有一张表格

表格 #1
----------------------------------------------------    
| name  |  id_a |  id_b | id_c | id_d |  id_e | id_f    
----------------------------------------------------

现在我得到了一些id的列表。其中一些id属于id_b,一些属于id_c,以此类推直到id_f。 对于这些id列表,我需要找到相应的id_a。

方法1: 确定哪些id属于id_b、id_c等等。 然后在我的mysql查询中使用多个in子句来获取id_a。

select id_a from Table #1 t1 where t1.id_b in () or t1.id_c in ().... or t1.id_f in ();

我希望能有一种替代方式。

方法 #2

是否有一种同时查询给定值的所有列的方法?类似于:

select id_a from Table #1 t1 where t1.id_b,t1.id_c,..t1.id_f in ();
3个回答

6
在PostgreSQL中,您可以使用数组重叠运算符&&
SELECT id_a
FROM   mytable
WHERE  ARRAY[id_b, id_c, id_d, id_e, id_f] && ARRAY[value1, value2, ...]

4

是的,你可以像这样做:

SELECT columnA
FROM tableA
WHERE (columnA, columnB, columnC)::text IN ('TEST', 'TEST2');

可能需要使用::text命令


1
(columnA, columnB, columnC)::text 将这些列组合在一起,以便输出看起来像 valueA,valueB,valueC。如果您想使其正常工作,则需要使用 LIKE ('%TEST%'),但不确定性能与其他解决方案相比如何。 - ricks

1
你可以使用 union。
select * from t where id_a in (

select * from 
(select id_b  from t union
select id_c from t union
select id_d from t union
select id_e from t union
select id_f from t
 ) as t1
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接