mysql动态sql无效_sql动态列的问题?

一种效率并不高的方案, 我想想看有没有更加高效的方法, 想到后在来编辑

create table ttd(

pname varchar(30),

pcode int,

cname varchar(30),

ccode int,

yname varchar(30),

ycode int

);

insert into ttd(pname, pcode, cname, ccode, yname, ycode) values

('北京', 110000, '北京', 110000,'东城', 110101),

('天津',120000, '天津', 120000, '和平', 120101),

('河北', 130000, '石家庄', 130100, '长安', 130102),

('河北', 130000, '唐山', 130200, '路南', 130202),

('河北', 130000, '秦皇岛', 130300, '海港', 130302),

('河北', 130000, '邯郸', 130400, '复兴', 130404);

select pname, pcode, yname, ycode from ttd where pname in ('北京', '天津')

union

select pname, pcode, cname, ccode from ttd where pname not in ('北京', '天津')

相对来说这种方案效率会高于上方的方式

select pname, pcode,

case pname

when '北京' then yname

when '天津' then yname

else cname

end as cname,

case pname

when '北京' then ycode

when '天津' then ycode

else ccode

end as ccode

from ttd

如果是 mysql 的话还可以这么玩, 在 postgresql 中怎么试都不过..

select pname, pcode, if(cname=pname, yname, cname) as cname, if (cname=pname, ycode, ccode) as ccode from ttd

还有个思路是 如果 cname=pname 就替换成 null 然后用 isnull 判断是取 yname 或者 cname , 当然这种方案并不靠谱, replace 函数貌似不支持替换一个字段...

当然啦, 这俩放方案的前提是你的 北京和天津 的 cname 要和 pname 一样,才可以用

我只是有点无聊. 其实实现这个功能的方案还有很多种, 在比如你单独返回一个 cname=pname as b 这样你在程序里面取 b ? yname : cname 当然也要和刚刚说的一样 cname 和 pname 相同

我得走人了 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值