Postgresql 从Postgres字段的多个值中选择任意一个
我有一张类似以下的桌子:Postgresql 从Postgres字段的多个值中选择任意一个,postgresql,Postgresql,我有一张类似以下的桌子: 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'; 但它感觉很难
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';
但它感觉很难看,生成查询的代码令人讨厌。我希望有一种方法可以做到(伪代码):
您正在描述in子句的功能
从单词权重中选择*,其中单词位于('a'、'Stiple'、'the')代码>如果要在单个参数中传递整个列表,请使用数组数据类型:
SELECT *
FROM word_weight
WHERE word = ANY('{a,steeple,the}'); -- or ANY('{a,steeple,the}'::TEXT[]) to make explicit array conversion
如果您不确定该值,甚至不确定该字段是空字符串还是空字符串
.where("column_1 ILIKE ANY(ARRAY['','%abc%','%xyz%']) OR column_1 IS NULL")
以上查询将涵盖所有可能性。谢谢你,马克。如果我能想出如何为谷歌表达这个问题!regexp_split_to_array()函数在这里可能有用,具体取决于查找单词的来源。或者,也可以将regexp\u split\u的结果连接到\u table()。
.where("column_1 ILIKE ANY(ARRAY['','%abc%','%xyz%']) OR column_1 IS NULL")