1、left join 或者right join
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
2、处理json
官方解释地址 https://www.postgresql.org/docs/9.5/static/functions-json.html
-> :是获取json对象
--> : 是获取的字符串
#> : 根据路径获得json对象
#>> :根据路径获得字符串
举个栗子
有个json字符串{"a":{"b":"c"}}
select ‘{"a":{"b":"c"}}‘::json ->‘a‘->>‘b‘ as result
返回结果
c
如果我获取a的时候用的是->>,也就是执行这么条语句select ‘{"a":{"b":"c"}}‘::json ->>‘a‘->>‘b‘ as result那么就会报错
执行信息:
[SQL]select ‘{"a":{"b":"c"}}‘::json ->>‘a‘->>‘b‘ as result
[Err] 错误: 操作符不存在: text ->> unknown
LINE 1: select ‘{"a":{"b":"c"}}‘::json ->>‘a‘->>‘b‘ as result
^
HINT: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
报错的原因呢就是就是 ->>返回的是text不是json对象所以后面的->>郁闷了就报错了。
那我如果就想这么写怎么办呢?
简单,把text转成json不就行了
select (‘{"a":{"b":"c"}}‘::json ->>‘a‘)::json->>‘b‘ as result
对了,这里的()是需要注意的如果::json之前的东西没用被括号起来那么会报错的
select ‘{"a":{"b":"c"}}‘::json ->>‘a‘::json->>‘b‘ as result
[SQL]select ‘{"a":{"b":"c"}}‘::json ->>‘a‘::json->>‘b‘ as result
[Err] 错误: json类型使用了无效的输入语法
LINE 1: select ‘{"a":{"b":"c"}}‘::json ->>‘a‘::json->>‘b‘ as result
^
DETAIL: 令牌 "a" 无效.
CONTEXT: JSON数据, 行 1: a
由此可以推测::优先级较高
3、