表1:
字段1 字段2
00001 A 
00002 B
00003 C
表2:
字段1 字段2
00001 B
00002 C
00003 D
如何实现以下查询:A B
B C
C D

解决方案 »

  1.   

    select A.字段2,B.字段2
    from 表1 A,表2 B
    where A.字段1=B.字段1
      

  2.   

    也可以这样写:
    -----------------------------------
    select A.字段2,B.字段2 
    from 表1 A inner join 表2 B
    on A.字段1=B.字段1
      

  3.   

    将以下代码复制至查询分析器,按F5可以验证此SELECT的正确性:
    --------------------------------------------------------------------------------------------------------
    if exists(select * from sysobjects where name='表1' and xtype='U') drop table 表1
    if exists(select * from sysobjects where name='表2' and xtype='U') drop table 表2
    GO
    --生成测试用数据,为SELECT初始环境
    CREATE TABLE 表1(字段1 varchar(10),字段2 varchar(10))
    INSERT INTO 表1 SELECT '00001','A'
    UNION ALL SELECT '00002','B'
    UNION ALL SELECT '00003','C'CREATE TABLE 表2(字段1 varchar(10),字段2 varchar(10))
    INSERT INTO 表2 SELECT '00001','B'
    UNION ALL SELECT '00002','C'
    UNION ALL SELECT '00003','D'--select * from 表1
    --select * from 表2
    GO
    --此处为用来查询的SELECT语句
    select A.字段2,B.字段2
    from 表1 A,表2 B
    where A.字段1=B.字段1GO
    --删除测试散数据
    DROP TABLE 表1,表2/* -- 结果 --字段2        字段2        
    ---------- ---------- 
    A          B
    B          C
    C          D(所影响的行数为 3 行)*/ -- 完成 --
      

  4.   

    select A.字段2+B.字段2 
    from 表1 A inner join 表2 B
    on A.字段1=B.字段1
      

  5.   

    如果想得到的结果集是一个组合字段,如:
    新字段                  
    -------------------- 
    AB
    BC
    CD可以换成下面这句:
    select A.字段2+B.字段2 as 新字段 from 表1 A,表2 B where A.字段1=B.字段1
      

  6.   

    select A.字段2,B.字段2
    from 表1 A,表2 B
    where A.字段1=B.字段1
      

  7.   

    SELECT 表1.字段2+表2.字段2 
    FROM 表1
    INNER JOIN 表2
    ON 表1.字段1=表2.字段1或者SELECT 表1.字段2+表2.字段2 
    FROM 表1,表2
    WHERE 表1.字段1=表2.字段1
      

  8.   

    不好意思,我补充一下,不是要显示所有的内容!表1:
    字段1 字段2
    00001 A 
    00002 B
    00003 C
    00004 S
    00005 T
    00006 Y
    表2:
    字段1 字段2
    00001 B
    00002 C
    00003 D
    00004 T
    00005 Y
    00006 Z怎么实现查询:
    A B
    B C
    C D
      

  9.   

    没有别的条件?select A.字段2+B.字段2
    from 表1 A inner join 表2 B
    where A.字段1 between '00001' and '00003'
      

  10.   

    要可实现任意的查询,比如可以查询
    B C
    C D又或者
    S T
    T Y
    Y Z
      

  11.   

    SELECT 表1.字段2+表2.字段2 
    FROM 表1
    INNER JOIN 表2
    ON 表1.字段1=表2.字段1或者SELECT 表1.字段2+表2.字段2 
    FROM 表1,表2
    WHERE 表1.字段1=表2.字段1
    是TOP 3
    还是表1.字段1在 00001-00003之间
    或是表1.字段2=A或B或C?若是TOP 3则在SELECT 后加 TOP 3若 00001 - 00003 
    在 第一种写法后面加上 WHERE 表1.字段1 LIKE '0000[1-3]'
    在 第二种写法后加上 AND 表1.字段1 LIKE '0000[1-3]'若是取 A,B,C
    在 第一种写法后面加上 WHERE 表1.字段2 LIKE '[A-C]'
    在 第二种写法后加上 AND 表1.字段2 LIKE '[A-C]'
      

  12.   

    我又文字描述一下好了:
    要显示两表的字段2
    而字段2通过字段1联接的我要实现的查询是这样的:
    查询表1的字段2的某个值如A
    同时显示表2中有对应表1A的值假如是B,
    如果B也出现在表1中,那么也要显示对应表2中的值
    直到表2的值不存在表1中,查询结束
      

  13.   

    要实现的是有值就查询,

    第一行
    A     B
    如果B在表1中也存在,则显示第二行
    B     C
    就这样查询下去
      

  14.   

    查询表1的字段2的某个值如A
    同时显示表2中有对应表1A的值假如是B,
    如果B也出现在表1中,那么也要显示对应表2中的值
    直到表2的值不存在表1中,查询结束
    按你的描述, T,Y也应该在结果中.越说我看的越晕.
      

  15.   

    A  B
    B  C
    C  D
    因为D不在表1中,所以查询到此结束;我要查询是可以实现从表1的某个值开始查询下去
      

  16.   

    表1:
    字段1 字段2
    00001 A 
    00002 B
    00003 C
    00004 S
    00005 T
    00006 Y
    表2:
    字段1 字段2
    00001 B
    00002 C
    00003 D
    00004 T
    00005 Y
    00006 Z怎么实现查询:
    A B
    B C
    C D
    --------------------
    查詢過程
    A(1)-B(2)->B(1)-C(2)->C(1)-D(2)-->D不在1中,所以結束??
    樓主的意思是這個麼?
      

  17.   

    对应关系:表1的值有对应一个表2的值,而表2的值不一定有对应表1的值
    先设定查询表1中的A(可任意指定):
    1.查询表2中对应的B;
    2.如果B在表1中不存在,则终止;
    3.如果B在表1中存在,则查询表2中对应的C;
    4.如果C在表1中不存在,则终止;
    5.如果C在表1中存在,则查询表2中对应的D;
      

  18.   

    playwarcraft
    你说的对,我刚才没表达清楚,谢谢你,是你说的意思!
      

  19.   

    declare @a table
    (
    col1 varchar(5),
    col2 varchar(5)
    )
    insert into @a
    select '00001','A' union all
    select '00002','B' union all
    select '00003','C' union all
    select '00004','S' union all
    select '00005','T' union all
    select '00006','Y'declare @b table
    (
    col1 varchar(5),
    col2 varchar(5)
    )
    insert into @b
    select '00001','B' union all
    select '00002','C' union all
    select '00003','D' union all
    select '00004','T' union all
    select '00005','Y' union all
    select '00006','Z'
    select a.col2+b.col2
    from @a a inner join @b b
    on a.col1=b.col1
    and a.col1<=
    (
    select min(col1)
    from @a a1
    where not exists
    (
    select 1
    from @a
    where col2=(select col2 from @b where col1=a1.col1)
    ))/*
    AB
    BC
    CD
    */
      

  20.   

    应该凑合可以用了,CSDN上真是什么奇怪的要求都能看到-_-;
      

  21.   

    把你的数据顺序改一下看看
    declare @a table
    (
    col1 varchar(5),
    col2 varchar(5)
    )
    insert into @a
    select '00001','A' union all
    select '00002','B' union all
    select '00003','S' union all
    select '00005','T' union all
    select '00006','Y' union all
    select '00004','C' 呵呵.
      

  22.   

    這個能出來結果,就是算法不咋地...declare @c3 char(02),@c4 char(02)
    set @c3='A' /*要什麼開頭自己改*/
    set @c4=(select  t2.c2 from t1, t2 where  t1.c1=t2.c1 and t1.c2=@c3)
    select @c3 c1,@c4 c2
    while (select 1 from t1 where c2=@c4)=1
         begin 
         select  t1.c2,t2.c2 from t1 , t2 where  t1.c1=t2.c1 and t1.c2=@c4
           set @c4=( select  t2.c2 from t1, t2 where  t1.c1=t2.c1 and t1.c2=@c4)
         end
      

  23.   

    选出的数据应该是
    A-B
    B-C
    C-T
    T-Y
    Y-Z你得出的结果是:
    AB
    BC
    SD
      

  24.   

    我也贴一个不怎么样的算法.DECLARE @t1 TABLE(f1 CHAR(10),f2 CHAR(1))
    INSERT @t1
    SELECT '00001', 'A' 
    UNION SELECT '00002', 'B'
    UNION SELECT '00004', 'C'
    UNION SELECT '00003', 'S'
    UNION SELECT '00005', 'T'
    UNION SELECT '00006', 'Y'DECLARE @t2 TABLE(f21 CHAR(10),f22 CHAR(1))
    INSERT @t2
    SELECT '00001', 'B'
    UNION SELECT '00002', 'C'
    UNION SELECT '00003', 'D'
    UNION SELECT '00004', 'T'
    UNION SELECT '00005', 'Y'
    UNION SELECT '00006', 'Z'DECLARE @t3 TABLE(f CHAR(2))DECLARE @i CHAR(10)
    DECLARE @b BIT
    DECLARE @CurA1 CHAR(1)
    DECLARE @CurA2 CHAR(1)
    SELECT @i=MIN(f1) FROM @t1
    SET @b=1WHILE @b=1
    BEGIN
    SELECT @CurA1=f2,@CurA2=f22 FROM @t1 INNER JOIN @t2 ON f1=f21 WHERE f1=@i
    INSERT @t3 SELECT @CurA1+@CurA2
    SET @i=NULL
    SELECT @i=f1 FROM @t1 WHERE f2=@CurA2
    IF @i IS NULL
    SET @b=0
    END
    SELECT * FROM @t3
      

  25.   

    lz没有要求作连锁,出来SD是正常的
      

  26.   

    这段话应该把要求说明很明确了 xiyang120() ( ) 信誉:100  2006-06-20 11:25:00  得分: 0  
     
     
       对应关系:表1的值有对应一个表2的值,而表2的值不一定有对应表1的值
    先设定查询表1中的A(可任意指定):
    1.查询表2中对应的B;
    2.如果B在表1中不存在,则终止;
    3.如果B在表1中存在,则查询表2中对应的C;
    4.如果C在表1中不存在,则终止;
    5.如果C在表1中存在,则查询表2中对应的D;
      
     
      

  27.   

    除了第一步以外,一直在顺序察看表2的字段并检索在表1中是否存在,与表1的排序无关,至于ABC只是LZ照一开始的那表里面次序说明而已
      

  28.   

    嗯,我也是这么理解的但是
    @a
    00001 A
    00002 B
    00004 C
    00003 S
    00005 T
    00006 Y@b
    00001 B
    00002 C
    00003 D
    00004 T
    00005 Y
    00006 Z
    A -(00001)- B
    B -(00002)- c
    c -(00004)- T
    T -(00005)- Y
    Y -(00006)- Z
    Z 在@a中无记录了你的语句选出的结果是AB
    BC
    SD不知道是不是我的理解有问题。
      

  29.   

    Select 表1.字段2,表2.字段2
    from 表1,表2
    where 表1.字段1=表2.字段1
      

  30.   

    对应关系:表1的值有对应一个表2的值,而表2的值不一定有对应表1的值
    先设定查询表1中的A(可任意指定):
    1.查询表2中对应的B;
    2.如果B在表1中不存在,则终止;
    3.如果B在表1中存在,则查询表2中对应的C;
    4.如果C在表1中不存在,则终止;
    5.如果C在表1中存在,则查询表2中对应的D;
    以上面的为查询条件,只要字段1相等,就查询字段2的值,
    这里字段1和字段2的值在查询结果中不存在值大小的排序的,
    只是根据查询过程的前后而分行显示;
    即有可能出现这样的结果:
    00009    U  I
    00008    I  H
    00010    H  X