首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 写不出来的一个sql语句,大家来帮帮我吧,以分相许,也只能以分相许了. [已结贴,结贴人:dahai99007]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-20 15:46:24 楼主
    Table Person                        Table province

    Id  Name Age High Weight ProvinceName  Id    ProvinceName
    1    张三 15  163  50kg  1            1    河北
    2    李四 18  170  60kg  2       2   山东
    3    王五 19  165  55kg  3       3   北京
    4    张三 20  169  50kg  1

    使用sql语句查询2个表,如何得到如下的结果:
    1    张三 15  163  50kg 河北
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    或者这样的结果:
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    4    张三 20  169  50kg 河北
    也就是说相同名字的人只显示1条记录,是哪条没关系.
    用存储过程实现也可以.
    Id  Name Age High Weight ProvinceName  每个字段都是必须要的.

    还请大哥大姐们帮帮小弟,非常感谢.
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:51:261楼 得分:0
    Table Person                            Table province

    Id  Name Age High Weight province.id    Id    ProvinceName
    1    张三 15  163  50kg  1              1        河北
    2    李四 18  170  60kg  2          2        山东
    3    王五 19  165  55kg  3           3        北京
    4    张三 20  169  50kg  1

    使用sql语句查询2个表,如何得到如下的结果:
    1    张三 15  163  50kg 河北
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    或者这样的结果:
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    4    张三 20  169  50kg 河北
    也就是说相同名字的人只显示1条记录,是哪条没关系.
    用存储过程实现也可以.
    Id  Name Age High Weight ProvinceName  每个字段都是必须要的.

    还请大哥大姐们帮帮小弟,非常感谢.
    这样的上边的变形了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cometome
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:51:552楼 得分:0
    这两个表通过那个字段关联呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:54:513楼 得分:0
    ....

    Table Person                                Table province

    Id  Name Age High Weight province.id        Id  ProvinceName
    1    张三 15  163  50kg  1                    1      河北
    2    李四 18  170  60kg  2                    2      山东
    3    王五 19  165  55kg  3                    3      北京
    4    张三 20  169  50kg  1

    使用sql语句查询2个表,如何得到如下的结果:
    1    张三 15  163  50kg 河北
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    或者这样的结果:
    2    李四 18  170  60kg 山东
    3    王五 19  165  55kg 北京
    4    张三 20  169  50kg 河北
    也就是说相同名字的人只显示1条记录,是哪条没关系.
    用存储过程实现也可以.
    Id  Name Age High Weight ProvinceName  每个字段都是必须要的.

    还请大哥大姐们帮帮小弟,非常感谢.
    这样的上边的变形了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:56:244楼 得分:0
    引用 2 楼 cometome 的回复:
    这两个表通过那个字段关联呢?

    通过province.id可以关联
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Zeteyu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 15:58:255楼 得分:0
    SQL code
    select * from Person join province on province.Id=Person.province.id

    用左连接?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:03:476楼 得分:0
    貌似直接join就可以.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:05:037楼 得分:0
    引用 5 楼 Zeteyu 的回复:
    SQL code
    select * from Person join province on province.Id=Person.province.id


    用左连接?

    这样的话我还能得到provinceName吗?
    Id  Name Age High Weight ProvinceName  每个字段都是必须要的.
    而且,还需要把name相同过滤掉,只能显示某一条(哪条是无所谓).
    这样满足不了上边的需求吧?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:06:088楼 得分:0
    select Person.Id,Person.Name,Person.Age, Person.High, Person.Weight, province.ProvinceName
    from Person inner join province
    on Person.id=province.id
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kingdomgps
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:08:139楼 得分:0
    select * from Person A
    left join province B
    on A.province.id = B.id
    and not exists
    (select 1 from Person where A.id = id and A.name = name )
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dahai99007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:08:5510楼 得分:0
    引用 6 楼 lovehongyun 的回复:
    貌似直接join就可以.

    直接join那是不是重名的过滤不掉啊?
    大哥大姐们,是不是我需求表达的不够清楚呀?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • JTFLSH
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:11:4111楼 得分:0
    select * from person a,province b where a.id=b.id and a.name='张三'
    改张三就行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lkjfeijfidosjf
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:12:1312楼 得分:0
    这个问题我以前也接触过,开始的时候我也找不到问题的原因,后来我进了一个技术交流群,这个群里的人挺多的,在里面可以沟通技术,你可以进去看一下.群号是:四`三`四`八`零`零`七`一。另外,这个群里可以接项目。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:13:4113楼 得分:0
    引用 10 楼 dahai99007 的回复:
    引用 6 楼 lovehongyun 的回复:
    貌似直接join就可以.

    直接join那是不是重名的过滤不掉啊?
    大哥大姐们,是不是我需求表达的不够清楚呀?


    哦.不好意思.看错了我发的不对

    没看清你下边的条件.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjin666
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:14:2814楼 得分:0
    select  distinct  *   
    from Person,province
    where Person.province.Id=province.ID

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZengHD
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:16:5015楼 得分:0
    楼上几位,有的关联错了吧

    SELECT MAX(Person.id), Person.Name, MAX(Person.age), MAX(Person.High),MAX(Person.Weight), MAX(province.ProvinceName)
    FROM Person INNER JOIN province
    ON Person.ProvinceID = province.id
    GROUP BY Person.NAME
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZengHD
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:19:0716楼 得分:0
    引用 14 楼 jinjin666 的回复:
    select  distinct  *   
    from Person,province
    where Person.province.Id=province.ID


    你这个不行吧,Person表的ID本来就没重复,你加distinct没用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:25:0717楼 得分:15
    这样写就可以.我写了段测试代码..
    lz打开查询分析器.复制下面代码.运行便知!
    SQL code
    declare @Person table ( Id int, Name varchar(50), Age int, High int, Weight varchar(50) ) declare @Province table ( id int, provinceName varchar(50) ) insert into @Province values(1,'河北') insert into @Province values(2,'山东') insert into @Province values(3,'北京') insert into @Person values(1,'张三',15,163,'50kg') insert into @Person values(2,'张三',20,163,'50kg') insert into @Person values(3,'李四',18,163,'50kg') select t.* from ( select t1.Id,t1.Name,t1.Age, t1.High, t1.Weight, t2.ProvinceName from @Person as t1 inner join @Province as t2 on t1.id=t2.id) t where t.id = (select top 1 tt.id from @Person as tt where tt.Name=t.Name)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojlovecd
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:26:5318楼 得分:15
    SQL code
    select a.*,b.ProvinceName from Person a inner join Province b on a.[province.id]=b.id where a.Id in (select min(Id) from Person group by Name)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:27:0719楼 得分:0
    最终sql如下:
    SQL code
    select t.* from ( select t1.Id,t1.Name,t1.Age, t1.High, t1.Weight, t2.ProvinceName from Person as t1 inner join Province as t2 on t1.id=t2.id ) t where t.id = (select top 1 tt.id from Person as tt where tt.Name=t.Name)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZengHD
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:28:2620楼 得分:0
    引用 17 楼 lovehongyun 的回复:
    这样写就可以.我写了段测试代码..
    lz打开查询分析器.复制下面代码.运行便知!

    SQL code
    declare @Person table
    (
    Id int,
    Name varchar(50),
    Age int,
    High int,
    Weight varchar(50)
    )

    declare @Province table
    (
    id int,
    provinceName varchar(50)
    )

    insert into @Province values(1,'河北')
    insert into @Province values(2,'山东')
    insert into @Province values(3,'北京')

    insert into @Person …

    我很奇怪,你为什么把Person表的ID关联到Province到的ID
    而且不是把Province表中的ProvinceID关联到Province表的ID
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZengHD
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:29:5221楼 得分:0
    引用 20 楼 ZengHD 的回复:
    引用 17 楼 lovehongyun 的回复:
    这样写就可以.我写了段测试代码..
    lz打开查询分析器.复制下面代码.运行便知!

    SQL code
    declare @Person table
    (
    Id int,
    Name varchar(50),
    Age int,
    High int,
    Weight varchar(50)
    )

    declare @Province table
    (
    id int,
    provinceName varchar(50)
    )

    insert into @Province values(1,'河北')
    insert into @Province values(2,'山东')
    insert into @P…

    我很奇怪,你为什么把Person表的ID关联到Province到的ID
    而不是把Person表中的ProvinceID关联到Province表的ID
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lovehongyun
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:30:1322楼 得分:0
    回20楼

    我只是举例,我又不知道你用哪个字段做关联.
    你改一下关联字段即可.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • freeboy827
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:34:3123楼 得分:0
    SQL code
    select a.id,a.name,a.age,a.high,a.weight,b.provincename from ( select max(id) as id,name,max(age) as age,max(high) as high,max(weight) as weight,max(provincename) as provincename from Person group by name ) a left join province b on a.provincename=b.id
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZengHD
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:38:3124楼 得分:0
    结吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fenlin1985
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 16:49:4425楼 得分:0
    其实简单点的思路就是 写一个游标 读每一条数据,读完以后插入临时表,如果发现临时表已经存在

    与这条数据名称重复的数据,便不插入临时表了,到最后查询临时表得出结果即可.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greenery
    • 等级:
    • 可用分等级: