PostgreSQL的Array Type
PostgreSQL的字段类型是有维度的,默认是0,如果设置了维度,就变成了数组类型
如果有张数据表,我们一般会给数据打上tag,多个tag对应一个数据,如果没有维度我们只能新建一张表,保存tag和数据对应关系。现在我们有Array Type。就可以直接使用一个字段来保存了。
CREATE TABLE "public"."posts" (
"id" int8 NOT NULL,
"title" varchar(255) NOT NULL,
"tags" varchar(16)[] NOT NULL
)
普通类型后面添加“[]”就转换成对应的数组类型;
插入数据使用{}包住,使用,分隔。
INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (1, '内容A', '{运动,健康}');
INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (2, '内容B', '{美食,健康}');
INSERT INTO "public"."posts" ("id", "title", "tags") VALUES (3, '内容C', '{运动}');
In Array查询,有ANY和ALL两个方法,ANY是里面有就行了,ALL就得全匹配了。
SELECT * FROM "posts" WHERE '运动' = ALL("tags");
只能查到内容C,只有运动的数据。
SELECT * FROM "posts" WHERE '运动' = ANY("tags");
能同时查到内容B和内容C,包含了运动的数据。
查询同时有运动和美食的数据要怎么查?需要使用generate_subscripts方法
SELECT
*
FROM
( SELECT "title", "tags", generate_subscripts ( tags, 1 ) AS s FROM posts ) AS foo
WHERE
tags [ s ] IN ( '运动', '美食' )
评论
发表评论