首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 问个 sql 语句 ?? [已结贴,结贴人:boaosi]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 11:28:09 楼主
    table A
      ID      age   
    1,2,3    FF

    table B
      ID  Name
      1    aa
      2    bb
      3    cc

    得到
    ID  Name  age
      1    aa    FF
      2  bb    FF
      3  Cc    FF
     
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-05-16 11:39:211楼 得分:0
    先将
    table A
      ID      age   
    1,2,3    FF

    分成
    1 FF
    2 FF
    3 FF
    的形式..

    再跟table b连接.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 11:45:322楼 得分:0
    怎么分 ???

    继续请教!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sweetweiwei
    • 等级:
    发表于:2008-05-16 11:49:193楼 得分:0
    --SQL Server 2005
    create table tb(id VARCHAR(10),value varchar(30))
    insert into tb values('FF','1,2,3')
    go
    SELECT B.value,A.id
    FROM(
        SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM tb
    )A
    OUTER APPLY(
        SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
    )B
    结果
    value                                                                                                id
    ---------------------------------------------------------------------------------------------------- ----------
    1                                                                                                    FF
    2                                                                                                    FF
    3                                                                                                    FF

    (3 row(s) affected)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 11:54:374楼 得分:0
      我是 在 sql  server  2000 中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sweetweiwei
    • 等级:
    发表于:2008-05-16 11:56:125楼 得分:0
    create table tb(id VARCHAR(10),value varchar(30))
    insert into tb values('FF','1,2,3')
    go
    SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b

    SELECT SUBSTRING(A.[value], B.id, CHARINDEX(',', A.[value] + ',', B.id) - B.id) as 'value',A.id
    FROM tb A, # B
    WHERE SUBSTRING(',' + A.[value], B.id, 1) = ','

    value                          id
    ------------------------------ ----------
    1                              FF
    2                              FF
    3                              FF

    (3 row(s) affected)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sweetweiwei
    • 等级:
    发表于:2008-05-16 12:09:276楼 得分:2
    CREATE TABLE t1
    (
    id varchar(10),
    age varchar(2)
    )
    insert into t1 values('1,2,3','FF')
    create table t2
    (
    id varchar(5),
    name char(2)
    )
    insert into t2
    select
    1, 'aa' union
    select
    2, 'bb' union
    select
    3, 'cc'

    SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b

    select t2.*,a.age
    from
    (SELECT SUBSTRING(A.[id], B.id, CHARINDEX(',', A.[id] + ',', B.id) - B.id) as 'id',A.age
    FROM t1 A, # B
    WHERE SUBSTRING(',' + A.[id], B.id, 1) = ',') a
    inner join t2 on a.id = t2.id
    结果
    id    name age
    ----- ---- ----
    1    aa  FF
    2    bb  FF
    3    cc  FF

    (3 row(s) affected)

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 12:14:517楼 得分:2
    SQL code
    /* -- Author:Flystone -- Date:2008-05-15 -- Version:V1.001 */ -- Test Data: Ta If object_id('Ta') is not null Drop table Ta Go Create table Ta(ID int,Name varchar(2)) Go Insert into Ta select 1,'aa' union all select 2,'bb' union all select 3,'cc' -- Test Data: Tb If object_id('Tb') is not null Drop table Tb Go Create table Tb(ID varchar(10),age varchar(2)) Go Insert into Tb select '1,2,3','FF' Go --Start select a.*,b.age from ta a left join tb b on charindex(','+ltrim(a.id)+',',','+b.id+',') > 0 --Result: /* ID Name age ----------- ---- ---- 1 aa FF 2 bb FF 3 cc FF (所影响的行数为 3 行) */ --End
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 12:38:158楼 得分:0
      要是第一个表中

    table A
      ID      age   
    1,2,3    FF
      4      GG
     

    table B
      ID  Name
      1    aa
      2    bb
      3    cc
      4    DD
    得到 
    ID  Name  age
      1    aa    FF
      2  bb    FF
      3  Cc    FF
      4    DD    GG

    当为这种 情况 就会出错哦??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-05-16 13:13:599楼 得分:0
    SQL code
    CREATE TABLE t1 ( id varchar(10), age varchar(2) ) insert into t1 values('1,2,3','FF') create table t2 ( id varchar(5), name char(2) ) insert into t2 select 1, 'aa' union select 2, 'bb' union select 3, 'cc' select b.id,b.name,a.age from t1 a,t2 b where charindex(b.id,a.id)>0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-05-16 13:16:4010楼 得分:3
    引用 8 楼 dadihongchang 的回复:
      要是第一个表中 

    table A 
      ID      age     
    1,2,3    FF 
      4      GG
     

    table B 
      ID  Name 
      1    aa 
      2    bb 
      3    cc 
      4    DD
    得到 
    ID  Name  age 
      1    aa    FF 
      2  bb    FF 
      3  Cc    FF 
      4    DD    GG

    当为这种 情况 就会出错哦??


    SQL code
    CREATE TABLE t1 ( id varchar(10), age varchar(2) ) insert into t1 values('1,2,3','FF') insert into t1 values('4','GG') create table t2 ( id varchar(5), name char(2) ) insert into t2 select 1, 'aa' union select 2, 'bb' union select 3, 'cc' union select 4, 'dd' select b.id,b.name,a.age from t1 a,t2 b where charindex(','+b.id+',',','+a.id+',')>0 /* id name age ----- ---- ---- 1 aa FF 2 bb FF 3 cc FF 4 dd GG (4 行受影响) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 14:18:2611楼 得分:3
    SQL code
    select b.*,a.age from tab1 as a right outer join tab2 as b on charindex(','+ltrim(rtrim(b.id))+',',','+a.id+',') > 0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-16 14:22:2512楼 得分:5
    SQL code
    update t set name = b.age from b t,a x where charindex(','+rtrim(t.id)+',',','+x.id+',')>0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhou968
    • 等级:
    发表于:2008-05-16 14:41:2213楼 得分:5
    SQL code
    CREATE TABLE A ( id varchar(10), age varchar(2) ) insert into A values('1,2,3','FF') create table B( id varchar(5), name char(2) ) insert into B select 1, 'aa' union select 2, 'bb' union select 3, 'cc' select B.id,B.name,A.age from A,B where charindex(B.id,A.id)>0
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved