如何用一条sql解多元多次方程和构造序列

比如一道比较简单的数学题

x+y=6

0<x<6,0<y<6

求所有整数解,以x y显示所有解


解答过程:

1.首先构造序列,以0<x<6,0<y<6方式构造序列

SQL> select rownum val from dual connect by rownum>=0 and rownum<=6
  2  /


       VAL
----------
1
2
3
4
5

6

x,y的范围就在这里取

2.把x+y=6放入where条件中

 where a.val+b.val=6

sql如下:

 with a as (select rownum val from dual connect by rownum>=0 and rownum<=6)
 ,b as (select * from a)
 select a.val x,b.val y from a,b
 where a.val+b.val=6

SQL> /
X    Y
---------- ----------
1    5
2    4
3    3
4    2
5    1

多元多次方程,可以使用power函数。

其实oracle构造了很多数学函数,有兴趣的同学可以翻看oracle的官方文档,比如sin,cos这些函数都有


上述sql中使用了connect by来构造序列,其实还有许多方法也可以构造序列,比如xmltable,dba_objects等等

xmltable:

SQL> select column_value from xmltable('1 to 5');
COLUMN_VALUE
--------------------------------------------------------------------------------
1
2
3
4
5


dba_objects:

select rownum from dba_objects where rownum<=5;

SQL> select rownum from dba_objects where rownum<=5;

    ROWNUM
----------
1
2
3
4

5

这些在构造较小序列时可以使用的方法,他们各有利弊,在构造较大序列时更为明显。怀晓明老师有一篇对oracle序列有非常精彩讲解的文章:

https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650275015&idx=1&sn=5a62227514b7e37f3ac9c6764cbde263&chksm=be4864d1893fedc7d70e9f54a2b7f4aa05a9a0fcda33068db2bf017e21bdae58c85ac0f42c7f&mpshare=1&scene=1&srcid=0705UW3Cz7t4xMVeKbH340We&key=d53c64c4a9a4bf1d1e3d616f32473a8d529502327297490d6b69b1bb5f1af0249fefb54bda4d2225b99dbb95dcb12fc018d1a1f5b435c5993f176bb0a9f647220fd3fd43d2c0c0bf73b55bb1a3c932d4&ascene=0&uin=MzQ5MDIyMTYw&devicetype=iMac+MacBookPro14%2C1+OSX+OSX+10.12.5+build(16F2073)&version=12020810&nettype=WIFI&lang=zh_CN&fontScale=100&pass_ticket=i4so9Zqmu6wr5qyCm2L4cVTDYxpuPxcfQzB%2B4L%2BYPAM%2B7IR1KuuYq6h43Uhh25po

深受启发


猜你喜欢

转载自blog.csdn.net/qq_40687433/article/details/79437218