2012-04-24 24 views
8

Tôi đã có một bảng tương tự như sau:Chọn từ bất kỳ nhiều giá trị từ một lĩnh vực Postgres

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

tôi cần phải kéo trọng lượng cho lời khác nhau ra khỏi cơ sở dữ liệu cùng một lúc. Tôi có thể làm:

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

nhưng cảm thấy xấu xí và mã tạo truy vấn là đáng ghét. Tôi hy vọng rằng có một cách tôi có thể làm điều gì đó như (mã giả):

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

Trả lời

14

Bạn đang mô tả chức năng của mệnh đề trong.

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

+0

Cảm ơn bạc hà, Mark. Có phải tôi đã tìm ra cách để đặt câu hỏi cho Google! –

8

Nếu bạn muốn vượt qua toàn bộ danh sách trong một tham số duy nhất, sử dụng mảng datatype:

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

Một câu trả lời tuyệt vời khác. –

+0

Hàm regexp_split_to_array() có thể được sử dụng ở đây, tùy thuộc vào nguồn của các từ tra cứu của bạn. Hoặc có thể là JOIN với kết quả của regexp_split_to_table(). http://www.postgresql.org/docs/9.1/interactive/functions-string.html#FUNCTIONS-STRING-OTHER – kgrittn

Các vấn đề liên quan