PostgreSQL中的数组与Any
any 操作符
where expression operator any (subquery) where expression operator some (subquery) 其实any和some在这里是同等效的,子查询的结果集只能是一个字段,左边表达式使用operator对结果集的每一行进行一次比较运算, 如果有一个运算结果是'TRUE',则表达式结果为'TRUE',如果比较结果全部是'FALSE'表达式结果才是'FALSE'。 expression表达式一般为:字段 operator操作符为: >, <, =, <>, >=, <= any可以与some替换 subquery子查询: 返回的必须是一列 > any 大于子查询结果中的某个值 < any 小于子查询结果中的某个值 >= any 大于或等于子查询结果中的某个值 <= any 小于或等于子查询结果中的某个值 = any 等于子查询结果中的某个值,相当于IN != any 不等于子查询结果中的某个值 select film_id,title,length from film where length >= any ( select max(film.length) from film inner join film_category using(film_id) );
all 操作符
where expression operator all(subquery) 同样子查询中仍只能返回一个字段,与子查询结果集每一行进行比较结果全部是'TRUE'表达式结果才是'TRUE',否则为'FALSE' > all 大于子查询结果中的所有值 < all 小于子查询结果中的所有值 >= all 大于或等于子查询结果中的所有值 <= all 小于或等于子查询结果中的所有值 = all 等于子查询结果中所有值(除非子查询的结果全部相等,所以实际上没什么意义) != all 不等于子查询结果中的任何一个值,相当于NOT IN select film_id,title,length from film where length > all ( select round(avg(length),2) as avg_length from film group by rating ) order by length desc;
使用in的时候,忽略为null的,不会查询出comm为null的数据
select * from emp e where e.comm in (300, 500, null);
2. 使用not in的时候,如果 not in后面的选项中没有null,只会查询从comm列不为空的列中过滤,会过滤掉comm为null的数据
select * from emp e where e.comm not in (300, 500);
3. 使用not in 的时候,如果not in后面的选项中有null,不会查询出来任何数据。sql语句本身直接返回false,所以使用not in的时候,要保证in中的条件不会出现null的情况,不然可能会出现意想不到的情况。
select * from emp e where e.comm not in (300, 500, null);
查询为 字段 course_id null
CourseId pq.StringArray `json:"course_id" gorm:"type:text[]"` //课程id
course_id is null
转载:https://blog.csdn.net/weixin_34101229/article/details/85572936