求高效sql,谢谢

[复制链接]
查看11 | 回复9 | 2010-10-8 09:32:27 | 显示全部楼层 |阅读模式
CREATE TABLE basetab(user_id NUMBER(10),main_prodid NUMBER(10));
INSERT INTO basetab VALUES(1,1001);
INSERT INTO basetab VALUES(2,1002);
INSERT INTO basetab VALUES(3,1003);
INSERT INTO basetab VALUES(4,1004);
INSERT INTO basetab VALUES(5,1005);
COMMIT;
CREATE TABLE order_product(user_id NUMBER(10),prodid1 NUMBER(10),prodid2 NUMBER(10),prodid3 NUMBER(10),prodid4 NUMBER(10));
INSERT INTO order_product(1,1008,1009,1001,1006);
INSERT INTO order_product(2,1008,1002,1007,1006);
INSERT INTO order_product(3,1008,1009,1003,1006);
INSERT INTO order_product(4,1008,1004,1001,1006);
INSERT INTO order_product(5,1008,1009,1005,1006);
COMMIT;
业务场景是这样的,有两张表 basetab 是用户主表里面记录了 用户的id(user_id),以及用户订购的主产品(main_prodid)

order_product 是用户的订购关系表 记录了用户的id(user_id),以及用户订购的所有产品(prodid1,prodid2,prodid3,prodid4)

prodid1到prodid4中肯定包含用户的主产品,但是位置不确定。
需求是:把order_product表中的用户主产品统一修改成1000。
比如user_Id=1的用户,在basetab表中可以得知他的主产品是1001,那么就要把order_product表中1001对应的prodid3字段update成1000.
比如user_Id=2的用户,在basetab表中可以得知他的主产品是1002,那么就要把order_product表中1002对应的prodid2字段update成1000.
求高手解答,不胜感激!!!!

回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
在线等 高手赶紧现身那
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
用户只能订购4个啊,第2个表设计不符合范式啊
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
这个没有啥好办法的,一列一列update,第2个表应该改变设计
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
dingjun123 发表于 2012-2-2 15:47
用户只能订购4个啊,第2个表设计不符合范式啊

不是只能订购4个
第二个表其实还有一个字段 rowid,主键是user_Id+rowid
用户订购产品大于4个之后,再插入一行 rowid自增1
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
select 'update order_product set '||decode(b.main_prodid,o.prodid1,prodid1,o.prodid2,prodid2,o.prodid3,prodid3,o.prodid4,prodid4,'null')||' = 1000 where user_id='||o.user_id||';'
from basetab b,order_product o where o.user_id=b.user_id;
你看这个满足吗
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
dingjun123 发表于 2012-2-2 15:49
这个没有啥好办法的,一列一列update,第2个表应该改变设计

谢谢答复,那我一列一列搞吧。。。。
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
谢答复,那我一列一列搞
看我这个行不
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
你这表设计的不好啊,应该看看范式
回复

使用道具 举报

千问 | 2010-10-8 09:32:27 | 显示全部楼层
hanchangjin 发表于 2012-2-2 15:57
看我这个行不

谢谢答复,您的方案需要对于每条记录都生成一条update sql
两个都是大表,可能会生成600万条sql,这样去执行的话 解析sql的时间感觉太长了
我目前想每个列update一次 搞4条sql
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行