一道多表更新的面试题

xiaoxiao2026-06-11  12

问题:有t_product产品表(编号,名称,价格,类别),有些编号的商品名称相同。 要求:将各同商品名称相同的,改为该商品的平均价格 select t.* from t_product tP_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 tP_ID P_NAME P_PRICE P_TYPE1 商品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 连接条件 )--子查询规律最强总结: --外部一个查询,内部一个查询,内部查询再跟一个连接条件。

转载请注明原文地址: https://www.6miu.com/read-5049973.html

最新回复(0)