select问题。

javaname6 2007-12-28 12:12:14
表A:里有cid,aname 两个字段.
表B: 里有jobid,cid,jobname 三个字段。 cid可能重复多个。

现在我想这样取:取表a里5最后5条记录,如果这5条记录在b里有对应的信息就把对应的jobname信息显示出来,没有就显示jobname为空。如果在b里有多个对应的记录,那么就取最后一条和他对应的。


这个是一个职位发布的,就是显示5条最新注册的企业及发布的职位,如果没有发布职位,光显示公司名称就行了。
...全文
234 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiule 2007-12-29
  • 打赏
  • 举报
回复
select a.cid,jobid = min(jobid),jobname = isnull(b.jobname,'')
from (select top 5 cid from a order by cid desc)a left join b on a.cid = b.cid
group by a.cid
gracexu 2007-12-29
  • 打赏
  • 举报
回复
CXMCXM好是好,但是假设结果里要增加字段jobid,读上去就。。。
pt1314917 2007-12-28
  • 打赏
  • 举报
回复

表A:里有cid,aname 两个字段.
表B: 里有jobid,cid,jobname 三个字段。 cid可能重复多个。

现在我想这样取:取表a里5最后5条记录,如果这5条记录在b里有对应的信息就把对应的jobname信息显示出来,没有就显示jobname为空。如果在b里有多个对应的记录,那么就取最后一条和他对应的。
------------------------------------------------------------
select isnull(jobname,'') from b k1,
(select top 5 cid from a order by cid desc)a
where not exists(select 1 from b where cid=k1.cid and jobid>k1.jobid) and k1.cid=a.cid
dobear_0922 2007-12-28
  • 打赏
  • 举报
回复
select T.cid,jobid = min(jobid),jobname = isnull(b.jobname,'')
from (select top 5 cid from a order by cid desc) T
left join b on T.cid = b.cid
group by T.cid
simonhehe 2007-12-28
  • 打赏
  • 举报
回复

select a.cid,jobid = min(jobid),jobname = isnull(b.jobname,'')
from (select top 5 cid from a order by cid desc)a left join b on a.cid = b.cid
group by a.cid

playwarcraft 2007-12-28
  • 打赏
  • 举报
回复
select T1.cid,T1.aname,T2.jobid,T2.jobname
from
(select top 5 cid,aname from A order by cid desc) T1
left join
(select X.* from B X
inner join
(select cid,max(jobid) as jobid from B group by cid) Y
on X.jobid=Y.jobid) T2
on T1.cid=T2.cid
cxmcxm 2007-12-28
  • 打赏
  • 举报
回复
select top 5 cid,aname,jobname=(select top 1 jobname from B where cid=a.cid order by jobid desc) from a
order by cid desc
-狙击手- 2007-12-28
  • 打赏
  • 举报
回复
表A:里有cid,aname   两个字段. 
表B: 里有jobid,cid,jobname 三个字段。 cid可能重复多个。


select a.*,isnull(b.jobname,'') as jobname
from (select top 5 * from tablea order by cid desc) a
left join (select * from tableb bb where not exists(select 1 from tableb where bb.cid = cid and jobid > bb.jobid)) b
on a.cid = b.cid
victorcai2006 2007-12-28
  • 打赏
  • 举报
回复
牛X的老龟~~~~
貌似没有老龟解决不了的问题
gracexu 2007-12-28
  • 打赏
  • 举报
回复
老乌龟很喜欢用子查询啊,我喜欢你的写法。
dawugui 2007-12-28
  • 打赏
  • 举报
回复
表A:里有cid,aname 两个字段.
表B: 里有jobid,cid,jobname 三个字段。 cid可能重复多个。

现在我想这样取:取表a里5最后5条记录,如果这5条记录在b里有对应的信息就把对应的jobname信息显示出来,没有就显示jobname为空。如果在b里有多个对应的记录,那么就取最后一条和他对应的。


这个是一个职位发布的,就是显示5条最新注册的企业及发布的职位,如果没有发布职位,光显示公司名称就行了。


--假设cid越大表示越后面.
--假设jobid越大表示越后面
--上面看漏了条件,B有多条.
select m.* , isnull(n.jobname,'') jobname from
(select top 5 * from A order by cid desc) m
left join
(select t.* from B t where jobid = (select max(jobid) from B where cid = t.cid)) n
on m.cid = n.cid
dawugui 2007-12-28
  • 打赏
  • 举报
回复
表A:里有cid,aname 两个字段.
表B: 里有jobid,cid,jobname 三个字段。 cid可能重复多个。

现在我想这样取:取表a里5最后5条记录,如果这5条记录在b里有对应的信息就把对应的jobname信息显示出来,没有就显示jobname为空。如果在b里有多个对应的记录,那么就取最后一条和他对应的。


这个是一个职位发布的,就是显示5条最新注册的企业及发布的职位,如果没有发布职位,光显示公司名称就行了。

--假设cid越大表示越后面.

select m.* , isnull(b.jobname,'') jobname from
(select top 5 * from A order by cid desc) m
left join B on m.cid = b.cid
gracexu 2007-12-28
  • 打赏
  • 举报
回复
一楼的写法是对的,我也提供一种写法,差别只是谁先和谁联接的问题。

select a.cid, a.aname,b.jobid, b.jobname
from a inner join
(select top 5 a.cid, max(b.jobid) as jobid
from a left join b on a.cid=b.cid group by a.cid order by a.cid desc ) as T
on a.cid=t.cid
left join b on b.jobid=t.jobid
tianhama 2007-12-28
  • 打赏
  • 举报
回复
create table A (cid int identity(1,1),aname varchar(10))

insert into A select 'aa'
union all select 'bb'
union all select 'cc'
union all select 'dd'
union all select 'ee'
union all select 'ff'
union all select 'gg'
union all select 'hh'

create table B (jobid int identity(1,1),cid int,jobname varchar(10))

insert into B select 1,'a'
union all select 2,'a'
union all select 3,'a'
union all select 4,'a'
union all select 5,'a'
union all select 6,'a'
union all select 7,'a'
union all select 8,'a'
union all select 8,'b'

select a.cid as 企业编号,a.aname as 企业名称,b.jobid as 职位编号,b.jobname as 职位名称 from A a left join B b
on a.cid = b.cid
where a.cid in (select top 5 cid from A order by cid desc)
and
b.jobid in (select max(jobid) from B group by cid )

结果集如下:
企业编号 企业名称 职位编号 职位名称
4 dd 4 a
5 ee 5 a
6 ff 6 a
7 gg 7 a
8 hh 9 b

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧