博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
这个sql咋写?
阅读量:6228 次
发布时间:2019-06-21

本文共 2429 字,大约阅读时间需要 8 分钟。

  hot3.png

这个sql咋写?

两个表的结构一模一样,数据大部分是重复,小部分不同;

要求:

1.如果a列数据相同,计算b列相减的结果

test1:

a    b 

xxx  1

yyy  2

zzz  3

 

test2

a    b

xxx  3

zzz  2

qqq  1

查询结果结果为:

a    b

xxx  2

zzz  -1

yyy  -2

qqq  1 

 

Create Table:

CREATE TABLE test1(a VARCHAR2(20),b NUMBER);CREATE TABLE test2(a VARCHAR2(20),b NUMBER);INSERT INTO test1 VALUES('xxx',1);INSERT INTO test1 VALUES('yyy',2);INSERT INTO test1 VALUES('zzz',3);INSERT INTO test2 VALUES('xxx',3);INSERT INTO test2 VALUES('zzz',2);INSERT INTO test2 VALUES('qqq',1);SELECT * FROM test1;SELECT * FROM test2;

 

Solution 1:

SELECT a      ,SUM(c) AS bFROM   (SELECT a              ,-1 * b AS c        FROM   test1        UNION ALL        SELECT a              ,b AS c        FROM   test2)GROUP  BY a;A                             B-------------------- ----------yyy                          -2zzz                          -1xxx                           2qqq                           1

 

Solution 2:

SELECT nvl(t2.a, t1.a) a      ,(nvl(t2.b, 0) - nvl(t1.b, 0)) bFROM   test2 t2FULL   OUTER JOIN test1 t1 ON (t2.a = t1.a);A                             B-------------------- ----------xxx                           2yyy                          -2zzz                          -1qqq                           1

 

 

来自:CU-ORALCE群

JOIN复习:

 

SQL> SELECT nvl(t2.a, t1.a) a  2        ,(nvl(t2.b, 0) - nvl(t1.b, 0)) b  3  FROM   test2 t2  4  RIGHT JOIN test1 t1 ON (t2.a = t1.a); A                             B-------------------- ----------xxx                           2zzz                          -1yyy                          -2SQL> SQL> SELECT nvl(t2.a, t1.a) a  2        ,(nvl(t2.b, 0) - nvl(t1.b, 0)) b  3  FROM   test2 t2,test1 t1  4  WHERE  t2.a(+) = t1.a; A                             B-------------------- ----------xxx                           2zzz                          -1yyy                          -2

 

 

 

 

 

 

SQL> SELECT nvl(t2.a, t1.a) a  2        ,(nvl(t2.b, 0) - nvl(t1.b, 0)) b  3  FROM   test2 t2  4  LEFT JOIN test1 t1 ON (t2.a = t1.a); A                             B-------------------- ----------xxx                           2zzz                          -1qqq                           1 SQL> SQL> SELECT nvl(t2.a, t1.a) a  2        ,(nvl(t2.b, 0) - nvl(t1.b, 0)) b  3  FROM   test2 t2,test1 t1  4  WHERE  t2.a = t1.a(+); A                             B-------------------- ----------xxx                           2zzz                          -1qqq                           1

原文链接:

转载于:https://my.oschina.net/dtec/blog/46736

你可能感兴趣的文章
《别做正常的傻瓜》的一些读书心得
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
PMP考试的过与只是
查看>>
java 监控 收集资料3(收集中)
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
getRealPath()和getContextPath()的区别
查看>>
python pip install 出现 OSError: [Errno 1] Operation not permitted
查看>>
oracle12C 重做日志
查看>>
awk-sed
查看>>
zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
查看>>
手写Json转换
查看>>
编码规约
查看>>
LeetCode OJ:Min Stack(最小栈问题)
查看>>
JS判断数组方法大全
查看>>
Tftod 的服务器使用下载文件
查看>>
从源码分析scrollTo、scrollBy、Scroller方法的区别和作用
查看>>
数字电路建模 - jchdl
查看>>
( 转)UVM验证方法学之一验证平台
查看>>
编写每天定时切割Nginx日志的脚本
查看>>