<紧急求助>我写的SQL语句哪里出问题了?????

zhzhl202 2008-11-11 07:33:50
我在数据库train中建立两个表,表Station 中有stationID,stationName,linknum三个字段,表Town中有ID,townName.
我的目的是想若Station表中stationName和表Town中的townName相同,则把Station表中linknum更新为和Town表中的ID相同。
我思来想去,就写了如下的SQL语句:
->SELECT Town.ID, Station.linknum, Town.townName, Station.stationID
INTO #back FROM Station INNER JOIN Town ON Town.townName = Station.stationName //先把两表合在一起放入#back表中
->UPDATE #back
SET linknum = stationID //然后在#back中更新linknum,第三句我想最终把Station
->UPDATE Station //中linknum 更新过来
SET linknum =
SELECT linknum FROM #back jion Station ON Station.stationID = #back.stationID
//前面都行,可是去在此出错,错误说是服务器: 消息 156,级别 15,状态 1,行 3 在关键字 'SELECT' 附近有语法错误。
到底哪里出错了??高手来帮忙呀!!!!!!!
一开始的时候我是这样写的:
UPDATE Station
SET linknum =
SELECT Town.ID
FROM Town INNER JOIN
Station ON Station.stationName = Town.townName

出现以下错误:
服务器: 消息 156,级别 15,状态 1,行 3
在关键字 'SELECT' 附近有语法错误。
什么原因呢??是不是select 语句返回的值不是一个呢???
...全文
105 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2008-11-12
  • 打赏
  • 举报
回复
update a set a.x=b.y from ta a inner join tb b on a.id=b.id

没有
update ta set a.x=select y from tb ..这种写法



update a set a.x=(select y from tb where id=a.id) from ta a
这种写法也不推荐


当然,第一种写法等价于 from ta a,tb b where ...
Ny-6000 2008-11-12
  • 打赏
  • 举报
回复
帮顶,学习的标记
  • 打赏
  • 举报
回复

若Station表中stationName和表Town中的townName相同,则把Station表中linknum更新为和Town表中的ID相同。

update station
set linknum=town.id
from station,town
where station.stationname=town.townname
等不到来世 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhzhl202 的回复:]
引用 4 楼 hdhai9451 的回复:
错啦!
UPDATE Station //中linknum 更新过来
SET linknum = (SELECT linknum FROM #back jion Station ON Station.stationID = #back.stationID )


错在何处??!!!
[/Quote]
错了很多地方,
首先,SET linknum =后面如果接了个子查询,则这个子查询必须用括号括起来:SET linknum =(select xxx...)
如果这个子查询可能返回多个值,还得加top: SET linknum =(select top 1 xxx....)

其次,update语句不能这么写,语法不对。
可以这么写:
UPDATE Station                                                    
SET linknum = a.linknum
FROM #back a
where Station.stationID = a.stationID

--or

UPDATE b
SET linknum = a.linknum
FROM #back a join Station b
on a.stationID = b.stationID
zhzhl202 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hdhai9451 的回复:]
错啦!
UPDATE Station //中linknum 更新过来
SET linknum = (SELECT linknum FROM #back jion Station ON Station.stationID = #back.stationID )
[/Quote]

错在何处??!!!
nalnait 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hdhai9451 的回复:]
错啦!
UPDATE Station //中linknum 更新过来
SET linknum = (SELECT linknum FROM #back jion Station ON Station.stationID = #back.stationID )
[/Quote].
zhzhl202 2008-11-11
  • 打赏
  • 举报
回复
哪里错啦??
ws_hgo 2008-11-11
  • 打赏
  • 举报
回复
UP
-晴天 2008-11-11
  • 打赏
  • 举报
回复
注意,town.id 与 station.linknum 的数据类型必须一致.
Andy__Huang 2008-11-11
  • 打赏
  • 举报
回复
错啦!
UPDATE Station //中linknum 更新过来
SET linknum = (SELECT linknum FROM #back jion Station ON Station.stationID = #back.stationID )
-晴天 2008-11-11
  • 打赏
  • 举报
回复
update station set linknum=(select id from town where townname=a.stationname) from station a
hao1hao2hao3 2008-11-11
  • 打赏
  • 举报
回复
用括号把linknum=后面的语句括起来,如果不是一个值就用in.
水族杰纶 2008-11-11
  • 打赏
  • 举报
回复
--TRY
UPDATE Station
SET linknum = s.linknum FROM #back b join Station s ON S.stationID = b.stationID

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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