当前位置:首页 » 编程语言 » sql标签同时出现的组合
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql标签同时出现的组合

发布时间: 2023-05-19 07:50:39

‘壹’ 关于sql相同表分组排列组合的问题

  1. 建两个序列,并通过一个函数调用序列(union 不支持直接使用序列),用于排序。

  2. 先用第二组所有行(3行),union all 3遍第一组第一行(left join 第二组,行数就和第二组一样了)

  3. 在用第二组所有行(3行),union all 3遍第一组第二行(left join 第二组,行数就和第二组一样了)

  4. 最后按照序号,组别,编号排序

/*
dropsequenceBig_Letter1;
CreatesequenceBig_Letter1
Incrementby1
Startwith65
Maxvalue999999
Minvalue1
Nocycle
nocache;

dropsequenceBig_Letter2;
CreatesequenceBig_Letter2
Incrementby1
Startwith65
Maxvalue999999
Minvalue1
Nocycle
nocache;

--获取数列下一个值
createorreplacefunctionget_seq_next(seq_nameinvarchar2)returnnumber
is
seq_valnumber;
begin
executeimmediate'select'||seq_name||'.nextvalfromal'intoseq_val;
returnseq_val;
endget_seq_next;

*/

withtmpas(
select'1'groupid,'1'numfromal
union
select'1','2'fromal
union
select'2','1'fromal
union
select'2','2'fromal
union
select'2','3'fromal
)
selectchr(get_seq_next('Big_Letter1'))xuhao,t1.groupid,t1.num
fromtmpt1wheregroupid='2'
unionall
selectchr(get_seq_next('Big_Letter2'))xuhao,t1.groupid,t1.num
fromtmpt1,tmpt2
wheret1.groupid='1'andt1.num='1'andt2.groupid='2'
union
selectchr(get_seq_next('Big_Letter1'))xuhao,t1.groupid,t1.num
fromtmpt1wheregroupid='2'
unionall
selectchr(get_seq_next('Big_Letter2'))xuhao,t1.groupid,t1.num
fromtmpt1,tmpt2
wheret1.groupid='1'andt1.num='2'andt2.groupid='2'
orderbyxuhao,groupid,num

执行结果如下:

按照这个思路拼动态SQL吧

‘贰’ sql查询问题,一个标签表和产品表,多对多的关系,怎么查询同时关联多个标签的产品集合

用匹配查询,把标签表和查品表完全匹配,产品ID和标签ID是不是一个属性?语句如下:
Select * From 产品表 Inner Join 标签表 on 产品表.产品ID=标签表.标签ID Where 产品表.ID IS NOT NULL;
意思是把产品表和标签表里面ID字段完全对应地匹配起来,放在一个表里,这句要求你产品ID和标签ID一样,如果不一样,最起码要有点关系。比如:
表1:
ID | 字段1
----------------------
0152401 | 0000
-------------------------
0152302 | 5555
--------------------------
表2:
ID | 字段1
----------------------
52401 | 0000
-------------------------
52302 | 5555
--------------------------
表2.ID和表1.ID的关系就是:
right(表1.ID,5)=表2.ID
我相信你两个表之间一定有一个字段有关系,那就用取位函数来实现匹配吧 。
不重复出现相同的行,(要完全相同的行)就在SELECT 后面加个关键字
Distinct
语法:
Select Distinct 字段 From 表名;

‘叁’ sql语句 组合问题

你确定是所有组合吗?比如你有3个值a,b,c,那么所有组合就是3+3^2+3^3=39条记录。这其实就是笛卡尔积啊。

selecta,bfromtestunionall--一个的
selectt1.a+t2.a,t1.b+','+t2.bfromtest05t1,testt2unionall--二个的
selectt1.a+t2.a+t3.a,t1.b+','+t2.b+','+t3.bfromtestt1,testt2,testt3--三个的

结果如下: