21

我有一个类似于以下的表:

WORD    WEIGHT   WORDTYPE
a       0.3      common
the     0.3      common
gray    1.2      colors
steeple 2        object

我需要一次从数据库中提取几个不同单词的权重。我可以做:

SELECT * FROM word_weight WHERE WORD = 'a' OR WORD = 'steeple' OR WORD='the';

但感觉很难看,生成查询的代码也很讨厌。我希望有一种方法可以做类似(伪代码)的事情:

SELECT * FROM word_weight WHERE WORD = 'a','the';
4

3 回答 3

47

您正在描述 in 子句的功能。

select * from word_weight where word in ('a', 'steeple', 'the');

于 2012-04-24T17:05:26.520 回答
12

如果要在单个参数中传递整个列表,请使用数组数据类型:

SELECT  *
FROM    word_weight
WHERE   word = ANY('{a,steeple,the}'); -- or ANY('{a,steeple,the}'::TEXT[]) to make explicit array conversion
于 2012-04-24T17:07:46.523 回答
1

如果您不确定该值,甚至不确定该字段是空字符串还是 null,那么,

.where("column_1 ILIKE ANY(ARRAY['','%abc%','%xyz%']) OR column_1 IS NULL")

以上查询将涵盖所有可能性。

于 2018-03-16T15:39:25.597 回答