求SQL语句 ( 积分: 100 )

  • 主题发起人 主题发起人 小铮
  • 开始时间 开始时间

小铮

Unregistered / Unconfirmed
GUEST, unregistred user!
表A: 表B:
编号 名称 日期 编号
1 AA 1号 1
2 BB 2号 1
3 CC 3号 3

要得到表C:
编号 名称 日期
1 AA 1号
2 BB 空
3 CC 3号
 
select a.编号,a.名称,b.日期 from a left join b on a.编号=b.编号
 
多谢楼上,我开始也是和你写的一样,但得到的是这样的表C:
编号 名称 日期
1 AA 1号
1 AA 2号
2 BB
3 CC 3号
怎样只要一条记录“编号1”呢?
 
select distinct a.编号,a.名称,b.日期 from a left join b on a.编号=b.编号
看看行不行
 
无效,结果一样的
 
select a.编号,a.名称,b.日期 from a left join (select 日期,distinct(编号))b on a.编号=b.编号
 
不行,我用的是Access,此语句过不去,
另:当查询中要查询多个字段时,对其中一个字段用distinct不好使。
不知道大家是不是也是这样的。
 
楼主,a表的编号不是主键吗?如果是主键,不用 distinct都可以
 
select a.编号,a.名称,min(b.日期) as 日期
from a left join b on a.编号=b.编号
group by a.编号,a.名称

这是不是你想要的结果?
 
我看是楼主的问题有点意思。为什么要这样的功能。B中有两条对应记录,为什么要取其中第一个,而不取第二个。是数据库设计的有问题吧。
你的B 表必须要有自动编号字段。
用你以上的SQL语句:select a.编号,a.名称,b.日期 from a left join b on a.编号=b.编号
再加上 where b.自动编号 in (select min(自动编号) from 表b group by 编号)
这样你才能从B表中编号重复的记录中取出其中第一条,也就是最小的自动编号.才能筛选到你要的结果
楼上的也对!
 
我看楼主也是一个实现者,有时候作为实现者只能服从上面的决定,你发现很多问题却无能为力,很可悲.
 
select * from tb1 left join
(SELECT distinct tb2.bh,tb2.mdate
FROM tb2) tbTmp on tb1.bh=tbTmp.bh
已测过,楼主试试看。
 
select a.编号,a.名称,b.日期 from 表A as a
left join (select min(日期) as 日期 ,编号 from 表B group by 编号) as b
on a.编号=b.编号
这样不知道行不行,sql server应该没问题

没有调试
 
非常感谢各位的帮助。问题解决了。
yzxcsw兄的运行不通过。
 
没道理呀,我的环境:windowsXP,Office2003,自己建立数据库,测试通过的。
 
后退
顶部