比如火车吧:
A表:
id,  车次,  起点,  终点
1   k100  hangzhou   shanghai
2   k300  hangzhou   beijin
3   D50   guangzhou  shanghai
4   L80  shanghai    beijin   
B表:
城市名称 城市编码
杭州    hangzhou
上海    shanghai
北京    beijin
广州    guangzhou
需要用B表的‘城市名称’来更新A表的‘起点’‘终点’
比如更新后A表为:
1   k100  杭州  上海
2   k300  杭州  北京
3   D50   广州  上海
4   L80  上海   北京用下面的语句不行
UPDATE T1 
SET F3=(SELECT T2.F2 FROM T2 WHERE T2.F1=T1.F1)

解决方案 »

  1.   

    update A
    set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
        终点 = (select 城市名称 from b where 城市编码 = a.终点)
    from A
      

  2.   

    update A set 
        起点 = (select 城市名称 from b where 城市编码 = a.起点),
        终点 = (select 城市名称 from b where 城市编码 = a.终点)
      

  3.   

    create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
    insert into a values(1 ,'k100' ,'hangzhou'  ,'shanghai')
    insert into a values(2 ,'k300' ,'hangzhou'  ,'beijin')
    insert into a values(3 ,'D50'  ,'guangzhou' ,'shanghai')
    insert into a values(4 ,'L80'  ,'shanghai'  ,'beijin')   
    create table b(城市名称 varchar(20) , 城市编码 varchar(20))
    insert into b values('杭州', 'hangzhou')
    insert into b values('上海', 'shanghai')
    insert into b values('北京', 'beijin')
    insert into b values('广州', 'guangzhou')
    goupdate A
    set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
        终点 = (select 城市名称 from b where 城市编码 = a.终点)
    from Aselect * from adrop table a , b/*
    id          车次         起点                   终点                   
    ----------- ---------- -------------------- -------------------- 
    1           k100       杭州                   上海
    2           k300       杭州                   北京
    3           D50        广州                   上海
    4           L80        上海                   北京(所影响的行数为 4 行)*/
      

  4.   

    update
     A
    set
      起点 = (select 城市名称 from b where 城市编码 = a.起点),
      终点 = (select 城市名称 from b where 城市编码 = a.终点)
      

  5.   

    create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
    insert into a values(1 ,'k100' ,'hangzhou'  ,'shanghai')
    insert into a values(2 ,'k300' ,'hangzhou'  ,'beijin')
    insert into a values(3 ,'D50'  ,'guangzhou' ,'shanghai')
    insert into a values(4 ,'L80'  ,'shanghai'  ,'beijin')   
    create table b(城市名称 varchar(20) , 城市编码 varchar(20))
    insert into b values('杭州', 'hangzhou')
    insert into b values('上海', 'shanghai')
    insert into b values('北京', 'beijin')
    insert into b values('广州', 'guangzhou')
    goupdate A
    set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
        终点 = (select 城市名称 from b where 城市编码 = a.终点)select * from adrop table a , b/*
    id          车次         起点                   终点                   
    ----------- ---------- -------------------- -------------------- 
    1           k100       杭州                   上海
    2           k300       杭州                   北京
    3           D50        广州                   上海
    4           L80        上海                   北京(所影响的行数为 4 行)*/
      

  6.   

    create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
    insert into a values(1 ,'k100' ,'hangzhou'  ,'shanghai')
    insert into a values(2 ,'k300' ,'hangzhou'  ,'beijin')
    insert into a values(3 ,'D50'  ,'guangzhou' ,'shanghai')
    insert into a values(4 ,'L80'  ,'shanghai'  ,'beijin')   
    create table b(城市名称 varchar(20) , 城市编码 varchar(20))
    insert into b values('杭州', 'hangzhou')
    insert into b values('上海', 'shanghai')
    insert into b values('北京', 'beijin')
    insert into b values('广州', 'guangzhou')
    goupdate a set 起点=(select 城市名称 from b where 城市编码=起点),
                 终点=(select 城市名称 from b where 城市编码=终点)
    select * from a
    id          车次         起点                   终点
    ----------- ---------- -------------------- --------------------
    1           k100       杭州                   上海
    2           k300       杭州                   北京
    3           D50        广州                   上海
    4           L80        上海                   北京(4 行受影响)
      

  7.   

    为什么我会这样
    消息 512,级别 16,状态 1,第 1 行
    子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
    语句已终止。
      

  8.   

    create table a(id int,车次 varchar(10), 起点 varchar(20), 终点 varchar(20))
    insert into a values(1 ,'k100' ,'hangzhou'  ,'shanghai')
    insert into a values(2 ,'k300' ,'hangzhou'  ,'beijin')
    insert into a values(3 ,'D50'  ,'guangzhou' ,'shanghai')
    insert into a values(4 ,'L80'  ,'shanghai'  ,'beijin')   
    create table b(城市名称 varchar(20) , 城市编码 varchar(20))
    insert into b values('杭州', 'hangzhou')
    insert into b values('上海', 'shanghai')
    insert into b values('北京', 'beijin')
    insert into b values('广州', 'guangzhou')
    goupdate A
    set 起点 = (select top 1 城市名称 from b where 城市编码 = a.起点 order by 城市名称),
        终点 = (select top 1 城市名称 from b where 城市编码 = a.终点 order by 城市名称)
    from Aselect * from adrop table a , b/*
    id          车次         起点                   终点                   
    ----------- ---------- -------------------- -------------------- 
    1           k100       杭州                   上海
    2           k300       杭州                   北京
    3           D50        广州                   上海
    4           L80        上海                   北京(所影响的行数为 4 行)
    */
      

  9.   

    你的数据貌似有重复数据 在B表中  以上Sql是在 B表中无重复数据的情况下
      

  10.   

    也是就是  A表的   shanghai  在B表找到了2笔或2笔以上的记录 。请先整理数据库     
                
      

  11.   

    use test
    go
     创建数据表
    create table A
    (
    id int,
    车次 char(5),
    起点 char(9),
    终点 char(9)
    )
    --插入测试数据
    insert into A select 1,'k100','hangzhou','shanghai'
    union all select 2,'k300','hangzhou','beijing'
    union all select 3,'D50','guangzhou','shanghai'
    union all select 4,'L80','shanghai','beijing'
    -- 创建数据表
    create table B
    (
    城市名称 char(5),
    城市编码 char(9)
    )
    --插入测试数据
    insert into B select '杭州','hangzhou'
    union all select '上海','shanghai'
    union all select '北京','beijing'
    union all select '广州','guangzhou'
    go
    代码实现update A
    set 起点 = (select 城市名称 from b where 城市编码 = a.起点),
    终点 = (select 城市名称 from b where 城市编码 = a.终点)select * from A/*
    id  车次    起点        终点
    -----------------------------
    1 k100  杭州      上海     
    2 k300  杭州      北京     
    3 D50   广州      上海     
    4 L80   上海      北京     */