MySQL降龙十八掌,第六掌内容:利涉大川之MySQL索引的使用与优化(附含MySQL8.0隐藏索引),了解详情>>
0

我的帖子

个人中心

设置

  发新话题
1 表结构如下:
create table b (SELLER varchar2(2),COUPON float,BAL int,NC varchar2(20));
insert into b (SELLER, COUPON, BAL, NC)
values ('A', 9, 100, '''B'',''D'',''C''');
insert into b (SELLER, COUPON, BAL, NC)
values ('B', 9, 200, '''A'',''D'',''C''');
insert into b (SELLER, COUPON, BAL, NC)
values ('C', 9, 300, '''A'',''D'',''B''');
insert into b (SELLER, COUPON, BAL, NC)
values ('D', 9, 400, '''A'',''C'',''B''');
insert into b (SELLER, COUPON, BAL, NC)
values ('A', 9.5, 100, '''B'',''D'',''C''');
insert into b (SELLER, COUPON, BAL, NC)
values ('B', 9.5, 20, '''A'',''D'',''C''');
insert into b (SELLER, COUPON, BAL, NC)
values ('A', 10, 80, '''B'',''D'',''C''');
commit;
2如何用sql实现如下查询
/*
以一条记录说明为例
用seller=‘A’ coupon=9 记录的nc字段值(‘B’,‘D’,‘C’)作为查询条件查询
得到的记录
A 9 200
A 9 300
A 9 400
其他记录逻辑一样,最终实现查询结果如下:
seller coupon,bal
A 9 200
A 9 300
A 9 400
B 9 100
B 9 300
B 9 400
C 9 100
C 9 200
C 9 400
D 9 100
D 9 200
D 9 300
。。 。
。。 。
*/
sj.jpg (14.84 KB)

2018-7-11 16:19

记录截图

sj.jpg




难道要这样的?
select seller, coupon, bal from b order by nc desc;



Just For Fun
经过试验,查询资料可用以下sql解决,抛砖引玉,先上图sql
select b0.seller,b0.bal, b0.coupon, b2.bal as nonself_bal --非本身bal值(标题中需求)
  from b b0, b b2
where instr((select ',' || replace(b1.nc, '''', '') || ','
               from b b1
              where b1.seller = b2.seller
                and b1.coupon = b2.coupon),
             ',' || b0.seller || ',') > 0
   and b2.coupon = b0.coupon
order by b0.coupon, b0.seller
--查询结果如下:
           SELLER        BAL        COUPON        NONSELF_BAL
1        A        100        9        400
2        A        100        9        300
3        A        100        9        200
4        B        200        9        300
5        B        200        9        100
6        B        200        9        400
7        C        300        9        100
8        C        300        9        400
9        C        300        9        200
10        D        400        9        200
11        D        400        9        100
12        D        400        9        300
13        A        100        9.5        20
14        B        20        9.5        100

这里主要的一个忽视点是:nc 字段值需要处理后才能做为条件使用,否则无法查询出结果,例如把上述sql改写成如下sql
select b0.seller,b0.bal, b0.coupon, b2.bal as nonself_bal --非本身bal值(标题中需求)
  from b b0, b b2
where b0.seller in(select b1.nc
               from b b1
              where b1.seller = b2.seller
                and b1.coupon = b2.coupon)         
   and b2.coupon = b0.coupon
order by b0.coupon, b0.seller
查询结果没有任何数据
主要问题还是上边sql中in 这个条件,不知道b0.seller 为什么就在in这个条件中就是false 有知道原因的希望可以补充下



‹‹ 上一贴:【Oracle RAC】Linux + Oracle 11g R2 RAC 安装配置详 ...   |   下一贴:安装oracle grid 时候安装界面闪退 ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2018 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com