因为已经有过一定的SQL语言基础,基本的增删查改都会,但是最近的工作涉及到一个SQL的视图的内容。因此有想法开始记录一下自己的能力。
使用的数据库为:Postgresql
查看数据库的工具为:Navicat for postgresql
于是视图的定义为:
SELECT record.id,record.record,
form."time",
dic.name AS intent,
form.enrollmentid
FROM (((apply_form_record record
LEFT JOIN apply_form form ON (((form.id)::text = (record.applyformid)::text)))
LEFT JOIN enrollment enroll ON (((enroll.id)::text = (form.enrollmentid)::text)))
LEFT JOIN sys_data_dictionary dic ON (((dic.id)::text = (enroll.intentid)::text)))
UNION ALL
SELECT cl.id,
cl.record,
cl.hittime AS "time",
dic.name AS intent,
cl.enrollid AS enrollmentid
FROM ((clicks cl
LEFT JOIN enrollment enroll ON (((enroll.id)::text = (cl.enrollid)::text)))
LEFT JOIN sys_data_dictionary dic ON (((dic.id)::text = (enroll.intentid)::text)));
这是个视图。
已经几乎忘记SQL视图是什么鬼了,于是百度一下。
得知,其实也就是一个虚拟表。
有几个不太懂的地方
1.dic.name AS intent
其实就是在查询的时候把dic.name叫做intent,仅此而已。
2.LEFT JOIN
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
3.UNION ALL
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。