日期:2014-05-16  浏览次数:20613 次

求一条sql语句,用来更新信息
小弟我做一个网站,想把购物车里的商品信息,添加到订单信息的商品表里,但是如果用户添加多个商品到购物车(比如买3个),那我怎么实现向订单信息的商品表更新这3条数据啊!!(因为订单的id是自动增长列,不能用插入)
这是我写的语句:
update orderinfochild set productid =(select productid from shopcart where membersid=1)
where orderid=(select orderid from orderinfomain join shopcart on(orderinfomain.membersid=shopcart.membersid) where shopcart.membersid=1)
但是提示错误:子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
当执行这句时:select productid from shopcart where membersid=1

返回3个值,跪求各位大神帮帮我,25号就交了
------解决方案--------------------
试试这个:
update orderinfochild set productid =(select top 1 productid from shopcart where membersid=1)
where orderid=(select orderid from orderinfomain join shopcart on(orderinfomain.membersid=shopcart.membersid) where shopcart.membersid=1)

------解决方案--------------------
建议楼主重新设计下表,不要用自增ID做订单号,如果硬要用这个做订单号,那么就用两张表。

表一   订单主编   存取订单共性信息(订购日期  订购总额  订购总数量 等)
表二   订单明细   存取订单具体产品信息(订单号  订购产品  订购单价  订购数量  订购金额等)

如楼主说明的问题,可以插入到订单明细或者更新订单明细即可,注意订单号要保持一致。
------解决方案--------------------
从LZ的语句看,
当用户添加多个商品到购物车,
对应的shopcart表即有多笔记录,
订单明细表orderinfochild也应该对应是多笔记录.

而不是更新orderinfochild表productid字段=3个值,语法错误,且逻辑上讲不通喔.
------解决方案--------------------
购物车中的上品确定购买的时候就把所有的产品信息插入到具体的订单明细表中,订单主表存订单信息,明细是具体订单的产品信息,插入就行。
------解决方案--------------------
为提高效能:
= 、in 会影响效能
应该改写为:
update orderinfochild set productid =(select max(productid) from shopcart where membersid=1)
from orderinfochild 
where exist(select 1 from orderinfomain join shopcart on(orderinfomain.membersid=shopcart.membersid) 
where orderinfochild .orderid=orderinfomain.orderid  and shopcart.membersid=1)