postgresql ARRAY ALLOF和ANYOF条件

时间:2017-08-25 08:47:36

标签: sql database postgresql rdbms

我有以下Postgresql记录:

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查询可能会失败,但我无法理解如何让所有能够说出我给出的数组中任何语言的人。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

使用&&(重叠)运算符代替@>(包含)运算符:

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