postgresql posgres过滤器“not contains”不像我期望的那样工作

pnwntuvh  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(157)

我正在执行以下查询:

SELECT *
FROM "Organization"
WHERE "allowedDomains" @> '{"gmail.com"}'
AND NOT "blacklist" @> '{"example@gmail.com"}';

我希望此查询列出在allowedDomains(string[])中包含gmail.com的所有组织,如果该组织在blacklist(string[])example@gmail.com中包含,则不包括该组织。
当我这样做:

SELECT *
FROM "Organization"
WHERE "allowedDomains" @> '{"gmail.com"}'

我得到

然后加上AND NOT "blacklist" @> '{"example@gmail.com"}';
结果为0。
(Just澄清一下,我只是使用example@gmail.com来编辑电子邮件,我尝试过滤的查询电子邮件键入正确)

mwkjh3gx

mwkjh3gx1#

如果两个数组中的任何一个是null,则@>运算符的结果也是null。使用coalesce()

SELECT *
FROM "Organization"
WHERE "allowedDomains" @> '{"gmail.com"}'
AND NOT coalesce("blacklist", '{}') @> '{"example@gmail.com"}';

相关问题