2017-08-25 6 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」をフランス語'。しかし、2つの言語のどちらかを話す(と必ずしも両方ではない)すべての人々を返還したい場合は、どのように達成するのですか?

私が試した:

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

をそれではなく、私が望んでいたすべてのレコードのゼロレコードを返します。 2番目のSELECTクエリが失敗する理由を漠然と理解しているようですが、私が与えた配列の言語を話すことができるすべてのPersonを取得する方法を理解できません。どんな助け?

答えて

0

&&(重複)演算子の代わりに@>(含有)演算子を使用:

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