我有一张类似于以下内容的表格:
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';
答案 0 :(得分:24)
您正在描述in子句的功能。
select * from word_weight where word in ('a', 'steeple', 'the');
答案 1 :(得分:9)
如果要在单个参数中传递整个列表,请使用array datatype:
SELECT *
FROM word_weight
WHERE word = ANY('{a,steeple,the}'); -- or ANY('{a,steeple,the}'::TEXT[]) to make explicit array conversion
答案 2 :(得分:0)
如果您不确定该值,甚至不确定该字段是否为空字符串,甚至是null,那么
.where("column_1 ILIKE ANY(ARRAY['','%abc%','%xyz%']) OR column_1 IS NULL")
以上查询将涵盖所有可能性。