概述
问题:有t_product产品表(编号,名称,价格,类别),有些编号的商品名称相同。
要求:将各同商品名称相同的,改为该商品的平均价格
select t.* from t_product t
P_ID P_NAME P_PRICE P_TYPE
1 商品a 2.00 t1
2 商品b 2.00 t2
3 商品c 3.00 t3
4 商品a 4.00 t4
5 商品b 4.00 t5
--★将各同商品名称相同的,改为该商品的平均价格
oracle中的写法:
update t_product t set t.p_price=
(
select avg(a.p_price)
from t_product a
where t.p_name=a.p_name
group by a.p_name
)
sqlServer:
update t_product set p_price=
(
select avg(a.p_price)
from t_product a
where t_product.p_name=a.p_name
group by a.p_name
);不能使用表别名
mysql中暂时没成功
更新以后:
select t.* from t_product t
P_ID P_NAME P_PRICE P_TYPE
1 商品a 3.00 t1
2 商品b 3.00 t2
3 商品c 3.00 t3
4 商品a 3.00 t4
5 商品b 3.00 t5
--分析过程:
select t.p_name from t_product t
--外部查询返回:
P_NAME
商品a
商品b
商品c
商品a
商品b
--针对于外部查询的每一行,分别执行:
P_NAME
商品a
select avg(a.p_price) from t_product a
where a.p_name='商品a'
group by a.p_name
商品b
select avg(a.p_price) from t_product a
where a.p_name='商品b'
group by a.p_name
商品c
商品a
商品b
--多表更新语法小结:
update ? set ?=(
select ? from ?
where 连接条件
)
--子查询规律最强总结:
--外部一个查询,内部一个查询,内部查询再跟一个连接条件。
最后
以上就是繁荣蜻蜓为你收集整理的一道多表更新的面试题的全部内容,希望文章能够帮你解决一道多表更新的面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复