2017-08-25 65 views
0

我有以下PostgreSQL的記錄:PostgreSQL的ARRAY ALLOF和ANYOF條件

CREATE TABLE People (Name TEXT, Languages TEXT[]); 
INSERT INTO People Values ('BillG', ARRAY['English', 'French', 'Tamil']); 
INSERT INTO People Values ('SteveJ', ARRAY['English', 'Spanish']); 
INSERT INTO People Values ('WarrenB', ARRAY['English', 'French', 'Spanish']); 

SELECT Name FROM People WHERE Languages @> ARRAY['English', 'French']; 

現在SELECT語句返回「BillG」和「WarrenB」因爲這兩個是誰說話都「英語」和唯一的「法國」。但是,如果我想要歸還所有說兩種語言(而不一定是兩種語言)的人,我該如何實現這一目標?

我想:

SELECT Name FROM People WHERE ARRAY['English', 'French'] @> Languages; 

但返回零個記錄而不是所有我想要的記錄。我似乎隱約理解爲什麼第二個SELECT查詢可能會失敗,但我無法理解如何讓所有可以說出我給出的數組中的任何語言的人員。任何幫助?

回答

0

使用&&(重疊)操作符代替@>(包含)運算符:

SELECT Name 
FROM People 
WHERE Languages && ARRAY['English', 'French']; 
┌─────────┐ 
│ name │ 
├─────────┤ 
│ BillG │ 
│ SteveJ │ 
│ WarrenB │ 
└─────────┘ 
(3 rows)