SQL连接两张相同或不同的表,使⽤UNION和UNIONALL操作
符
SQL UNION 操作符
UNION 操作符⽤于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使⽤ UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第⼀个 SELECT 语句中的列名。
上⾯概念解释清楚了。接下来说⼀下我的实际应⽤场景,我是需要把两个不同的表合并成⼀张表
我的思路是,确定⼀下最后需要返回的字段,以⼀张表为主体,另⼀张表的字段重命名去重合,这样就可以合并出想要的结果
但是问题⼜来了,因为我不只需要合并数据,我还要进⾏动态的条件过滤和分页,直接使⽤sql语句去做,不太好实现也不⽅便维护,我想到了⼀个⽐较简单的⽅法,就是把这个sql做成视图,这样我就不⽤担⼼条件过滤和分页了。因为我需要很频繁的查询,所以做成视图是⽐较好的办法,如果⼤家有其他⽐较好的想法,也可以留⾔。
下⾯晒⼀下我的最后效果,运⾏之后原本的11条加7条,就变成了18条了:
-- View: public."V_UNION"
-- DROP VIEW public."V_UNION";
CREATE OR REPLACE VIEW public."V_UNION" AS
SELECT
s."ID",
s."CATALOGID",
s."NAME",
s."TITLE",
s."INTRODUCTION",
s."KEYWORD",
s."VERSION",
s."CLASSIFY",
FROM "TEST1" s
UNION ALL
SELECT
r."ID",sql中union多表合并
r."CATALOGID",
r."NAME",
r."TITLE",
r."INTRODUCTION",
r."INTRODUCTION" AS "KEYWORD",
r."INTRODUCTION" AS "VERSION",
r."CLASSIFY",
FROM "TEST2" r
WHERE (r."CATALOGID" IN ( SELECT "CATALOG"."ID"
FROM "CATALOG"
WHERE "CATALOG"."PARENTID" in ('4', '5')));
ALTER TABLE public."V_UNION"
OWNER TO postgres;
COMMENT ON VIEW public."V_UNION"
IS '合并';
上⾯的sql⽰例中,第⼀个查询是不带条件,第⼆个是过滤指定的条件然后在合并的,构成我想要的合并结果之后,我后⾯的业务需求是对这些数据进⾏过滤,搜索,这个时候就⽐较简单了,就跟直接操作数据表⼀样,⽤select * from "V_UNION" where ...语句进去对应的过滤,分页。好了今天的分享就到这⾥,坚持每天记录⼀个⽤到的知识点!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论