2012-04-24 15 views
8

Mam tabelę podobny do następującego:Wybierz z jednego z wielu wartości z pola Postgres

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

muszę ciągnąć ciężary dla kilku różnych słów z bazy danych na raz. Mógłbym:

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

, ale to jest brzydkie, a kod generujący zapytanie jest nieprzyjemny. Mam nadzieję, że istnieje sposób, można zrobić coś jak (Pseudokod):

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

Odpowiedz

14

opisujesz funkcjonalności w klauzuli.

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

+0

Dzięki mięty, Mark. Gdybym mógł wymyślić, jak sformułować pytanie dla Google! –

8

Jeśli chcesz przekazać całą listę w jednym parametrze, użyj tablicy typu danych:

SELECT * 
FROM word_weight 
WHERE word = ANY('{a,steeple,the}'); -- or ANY('{a,steeple,the}'::TEXT[]) to make explicit array conversion 
+0

Kolejna doskonała odpowiedź. –

+0

Funkcja regexp_split_to_array() może być tutaj użyta, w zależności od źródła twoich słów wyszukiwania. A może JOIN do wyników regexp_split_to_table(). http://www.postgresql.org/docs/9.1/interactive/functions-string.html#FUNCTIONS-STRING-OTHER – kgrittn

Powiązane problemy