Вопрос по postgresql – Выберите любое из нескольких значений в поле Postgres

10

У меня есть таблица, похожая на следующую:

<code>WORD    WEIGHT   WORDTYPE
a       0.3      common
the     0.3      common
gray    1.2      colors
steeple 2        object
</code>

Мне нужно вытащить веса для нескольких разных слов из базы данных одновременно. Я мог бы сделать:

<code>SELECT * FROM word_weight WHERE WORD = 'a' OR WORD = 'steeple' OR WORD='the';
</code>

но это кажется уродливым и код для генерации запроса неприятен. Я надеюсь, что есть способ, которым я могу сделать что-то вроде (псевдокод):

<code>SELECT * FROM word_weight WHERE WORD = 'a','the';
</code>

Ваш Ответ

3   ответа
24

Вы описываете функциональность предложения in.

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

Спасибо, мята, Марк. Если бы я мог понять, как сформулировать вопрос для Google! Winfield Trail
0

Если вы не уверены в значении и даже не уверены, будет ли поле пустой строкой или даже пустым,

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

Выше запрос покроет все возможности.

9

Если вы хотите передать весь список в одном параметре, используйте тип данных массива:

SELECT  *
FROM    word_weight
WHERE   word = ANY('{a,steeple,the}'); -- or ANY('{a,steeple,the}'::TEXT[]) to make explicit array conversion
Здесь может пригодиться функция regexp_split_to_array (), в зависимости от источника ваших слов поиска. Или, может быть, присоединиться к результатам regexp_split_to_table ().postgresql.org/docs/9.1/interactive/…
Еще один отличный ответ. Winfield Trail

Похожие вопросы