1.PostgreSQL的sql语句对大小写要求严格,如果表名是大写字母组成的,在写SQL是必须使用大写字母,不像mysql那样的灵活,另外还必须使用双引号将表名和字段名括起来,参数值用单引号括起,举例:表名T_TEST,其中的字段名ID、NAME,SEX,AGE则按SEX查询的SQL为:SELECT "ID","NAME","SEX","AGE" FROM "T_TEST" WHERE "SEX"='男'。
2.模糊查询LIKE的使用,LIKE的使用需要用到 “||” ,举例:"NAME" LIKE '%'||#{name}||'%',注意:pgsql的LIKE支持int等数据类型,如果要进行这些类型的模糊查询,必须得转换一下类型,转成varchar类型,举例:"AGE"::TEXT LIKE '%'||#{age}||'%'。
3.记录一条递归查询的SQL:
WITH RECURSIVE "MT" ( "id", "parentId" ) AS (
SELECT "id", "parentId" FROM "DT_B_ADCD" WHERE "id" ='610000'
UNION ALL
SELECT m2."id",m2."parentId" FROM "DT_B_ADCD" m2,"MT" m3 WHERE m3."id" = m2."parentId" )
SELECT "id" FROM "MT"
说明:
(1).“RECURSIVE” 是PostgreSQL的关键字不是具体存在的表;
(2).第一行中的:"("id","parentId")"定义的是虚拟MT表的参数,字段的名称可随意,但字段的个数一定要与2~4行中的查询结果的个数一致!
(3).第二行中的id='610000'是需要查询开始层的ID,关键是第四行需要将虚拟表“MT"表与“DT_B_ADCD”实体表连表查询;
(4).特别需要注意的是第四行中的中的where条件(m3.id=m2.parentId) ,取虚拟表的id和实体表parentId连,这个条件决定了当前递归查询的查询方式(向上查询还是向下查询);