日期:2014-05-18  浏览次数:20677 次

sqlserver update inner join 问题 ! 解决马上给分
sql:代码

UPDATE RollingStock set quantity =a.quantity

from (select quantity,contractuntil,lastchange,addressno,partnumber from RollingStock where rollingstock_id>894) as a 

inner join (select quantity,contractuntil,lastchange,addressno,partnumber from RollingStock where rollingstock_id<=894) as c  

on a.addressno+a.partnumber=c.addressno+c.partnumber 

where RollingStock.rollingstock_id<=894 

and RollingStock.addressno+RollingStock.partnumber in (select d.addressno+d.partnumber 

from (select quantity,contractuntil,lastchange,addressno,partnumber from RollingStock where rollingstock_id>894) as d 

inner join (select quantity,contractuntil,lastchange,addressno,partnumber from RollingStock where rollingstock_id<=894) as e 

on d.addressno+d.partnumber=e.addressno+e.partnumber )


update级联更新

sql的意思 更新RollingStock表的quantity 字段 

将RollingStock表rollingstock_id>894 作为一个表 和 RollingStock表rollingstock_id<=894 作为一个表

做内联 如果有重复的数据 用RollingStock表rollingstock_id>894 的quantity 字段更新 

RollingStock表rollingstock_id<=894 的quantity 字段  

现在的SQL没有语法错误 也能更新 但更新的数据都是同样的结果 也就是说都是更新的一条死的数据 没有实现级联的更新

我在网上查过该语法 也没发现有什么不对的 请教高手了 给指点下吧

------解决方案--------------------
跨表更新,我给楼主举个例子:
SQL code

create table m_name  (id int,name varchar(4))
insert into m_name
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五'

select * from m_name
/*
id          name
----------- ----
1           张三
2           李四
3           王五
*/

create table m_chengji  (name varchar(4),kemu int,chengji int,id sql_variant)
insert into m_chengji
select '张三',1,95,null union all
select '张三',2,92,null union all
select '张三',3,91,null union all
select '李四',1,56,null union all
select '李四',2,76,null union all
select '李四',3,99,null union all
select '王五',1,57,null union all
select '王五',2,100,null union all
select '王五',3,67,null

select * from m_chengji
/*
name kemu        chengji     id
---- ----------- ----------- -----------
张三   1           95          NULL
张三   2           92          NULL
张三   3           91          NULL
李四   1           56          NULL
李四   2           76          NULL
李四   3           99          NULL
王五   1           57          NULL
王五   2           100         NULL
王五   3           67          NULL
*/

-- 更新m_chengji表的id为m_name中的id
update m_chengji 
set id = a.id from m_chengji b left join m_name a on a.[name]=b.[name]

------解决方案--------------------
楼主先使用select看下是否能查询出你需要的数据。
------解决方案--------------------
SQL code

建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。