Oracle SQL小问题

zhanggc1001 2009-07-02 08:54:34


UPDATE i_edi_order o
SET pricestd =
(SELECT max(pp.pricestd)
FROM m_productprice pp, m_pricelist_version pv,m_pricelist pl
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.m_product_id = o.m_product_id)
WHERE NOT EXISTS (
SELECT *
FROM m_productprice pp, m_pricelist_version pv
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.pricelist = o.priceactual
AND pp.m_product_id = o.m_product_id
AND o.m_product_id IS NOT NULL)
and E_Imp_Exe_ID=1004106



把以上的SQL能简化一下么???
...全文
32 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不要使用这种内连接方式,建议使用 LEFT JOIN 连接速度会提高很多。

在 EXISTS 子句中的 SELECT 不要选择 *,改成 SELECT 1 就可以了。
hm8328 2009-07-05
  • 打赏
  • 举报
回复
UPDATE i_edi_order o
SET pricestd =
(SELECT pp.pricestd
FROM m_productprice pp, m_pricelist_version pv,m_pricelist pl
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.m_product_id = o.m_product_id and rownum = 1 order by pp.pricestd desc)
WHERE E_Imp_Exe_ID=1004106 AND NOT EXISTS (
SELECT 1
FROM m_productprice pp, m_pricelist_version pv
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.pricelist = o.priceactual
AND pp.m_product_id = o.m_product_id
AND o.m_product_id IS NOT NULL)

效果可能回好点,在pp.pricestd建一个索引
hm8328 2009-07-05
  • 打赏
  • 举报
回复
UPDATE i_edi_order o
SET pricestd =
(SELECT pp.pricestd
FROM m_productprice pp, m_pricelist_version pv,m_pricelist pl
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.m_product_id = o.m_product_id order by pp.pricestd desc where rownum = 1)
WHERE E_Imp_Exe_ID=1004106 AND NOT EXISTS (
SELECT 1
FROM m_productprice pp, m_pricelist_version pv
WHERE pp.m_pricelist_version_id = pv.m_pricelist_version_id
AND pv.m_pricelist_id = o.m_pricelist_id
AND pp.pricelist = o.priceactual
AND pp.m_product_id = o.m_product_id
AND o.m_product_id IS NOT NULL)

效果可能回好点,在pp.pricestd建一个索引
Johnson_Hong 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhanggc1001 的回复:]
我只是将要求实现了,但是感觉有些繁琐
表 m_pricelist_version,PK:m_pricelist_version_id,FK:m_pricelist_id
表 m_productprice,PK:m_pricelist_version_id,m_product_id
表 i_edi_order,PK:i_edi_order_id
1.根据m_pricelist_id,m_product_id找出i_edi_order.priceactual和m_productprice.pricelist不同的i_edi_order记录
2.修改1中找出的i_edi_order记录中的i_edi_order.pricestd的值,该设定的值需要根…
[/Quote]

你不就是一条sql搞定的吗?想要一条sql又简单,是不太现实的,你的这个sql可以做一下等价变换,例如把not exsist 转换成not in,left join的写法
但是还是很麻烦,很多时候是不需要一条sql搞定的,怎么样处理最快,最合理才是最重要的
liubey_zff 2009-07-04
  • 打赏
  • 举报
回复
你们这帮人啊 哎
Nikill 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 Johnson_Hong 的回复:]
引用 7 楼 zhanggc1001 的回复:
我只是将要求实现了,但是感觉有些繁琐
表 m_pricelist_version,PK:m_pricelist_version_id,FK:m_pricelist_id
表 m_productprice,PK:m_pricelist_version_id,m_product_id
表 i_edi_order,PK:i_edi_order_id
1.根据m_pricelist_id,m_product_id找出i_edi_order.priceactual和m_productprice.pricelist不同的i_edi_order记录
2.修改1中找出的i_edi_order记录中的i_edi_order…
[/Quote]

项!!!!!!!!!!
yuwenbao 2009-07-03
  • 打赏
  • 举报
回复
呵呵,基本不太现实,因为你必须用where条件限制update的更新结果
oracle本身也必须要求这样写,想简单的话,sqlserver和mysql倒是可以简单些来写
默然说话 2009-07-03
  • 打赏
  • 举报
回复
哦,现在需求比较明确了,楼下的,快点给答案呀。
zhanggc1001 2009-07-03
  • 打赏
  • 举报
回复
我只是将要求实现了,但是感觉有些繁琐
表 m_pricelist_version,PK:m_pricelist_version_id,FK:m_pricelist_id
表 m_productprice,PK:m_pricelist_version_id,m_product_id
表 i_edi_order,PK:i_edi_order_id
1.根据m_pricelist_id,m_product_id找出i_edi_order.priceactual和m_productprice.pricelist不同的i_edi_order记录
2.修改1中找出的i_edi_order记录中的i_edi_order.pricestd的值,该设定的值需要根据m_pricelist_id,m_product_id找出m_productprice.pricestd最大的值
将该值设置到1中找出的i_edi_order记录。
注:要一条SQL搞定。
一洽客服系统 2009-07-02
  • 打赏
  • 举报
回复
sql不在乎简单繁琐 最重要的是性能
yuhongpingimu 2009-07-02
  • 打赏
  • 举报
回复
我不知道。。。
看楼下,
等结果
老紫竹 2009-07-02
  • 打赏
  • 举报
回复
头疼
fei1703 2009-07-02
  • 打赏
  • 举报
回复
如果你将这个SQL的功能稍微介绍一下
估计楼下的知道怎么简化了。。。
一头头 2009-07-02
  • 打赏
  • 举报
回复
JDBC的话 用PreparedStatement可以简化一点代码

SQL代码嘛。。。楼下的应该知道怎么简化的

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧