求 Sql 语句怎么写!

hailiu123 2010-04-25 11:19:41
有两张表
tb1 id name
01 张三
02 李四

tb2 id riqi renwu
01 2010.01.01 aaa
01 2010.02.02 bbb
02 2010.03.01 ccc
02 2010.04.02 ddd

我想得到下面的结果
01 张三 2010.01.01 aaa
02 李四 2010.03.01 ccc

也就是查询tb1表中所有的信息,并且将tb2表中最早的任务查询出来
下面是我的想法,但是and 后面的条件怎么写,
select tb1.id,tb1.name,tb2.riqi,tb2.renwu from tb1 left join tb2 on tb1.id=tb2,id and ?
...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
竹林听雨2005 2010-04-25
  • 打赏
  • 举报
回复

--并且将tb2表中最早的任务查询出来
select t1.id, t1.name, t2.riqi, t2.renwu from @t1 t1, @t2 t2
where t1.id=t2.id and riqi in (select min(riqi) from @t2 group by id)

这句可行了,
竹林听雨2005 2010-04-25
  • 打赏
  • 举报
回复
sxiaohui8709253

(小宋)

你那句肯定会报错的,因为该列没有包含在聚合函数或 GROUP BY 子句中
sxiaohui8709253 2010-04-25
  • 打赏
  • 举报
回复

select tb1.id,tb1.name,min(tb2.riqi),tb2.renwu from tb1 join tb2 on tb1.id=tb2.id

我觉得这句就够了吧
竹林听雨2005 2010-04-25
  • 打赏
  • 举报
回复

select t1.id, t1.name, t2.riqi, t2.renwu from @t1 t1, @t2 t2
where t1.id=t2.id and datepart(day, cast(riqi as smalldatetime))=1


再补一个,当然思路是一样的,我真不知道这个结果该用怎样的条件来限制,这个发帖时没说清。
hailiu123 2010-04-25
  • 打赏
  • 举报
回复
谢谢各位!!!
竹林听雨2005 2010-04-25
  • 打赏
  • 举报
回复

/*有两张表
tb1 id name
01 张三
02 李四

tb2 id riqi renwu
01 2010.01.01 aaa
01 2010.02.02 bbb
02 2010.03.01 ccc
02 2010.04.02 ddd

我想得到下面的结果
01 张三 2010.01.01 aaa
02 李四 2010.03.01 ccc
*/
--声明:我不知道表结构,所以都定义成varchar了,见谅
declare @t1 table (id varchar(2), name varchar(10))
declare @t2 table(id varchar(2), riqi varchar(10), renwu varchar(10))

insert into @t1 select '01', '张三'
union select '02', '李四'

insert into @t2 select '01', '2010.01.01', 'aaa'
union select '01', '2010.02.02', 'bbb'
union select '02', '2010.03.01', 'ccc'
union select '02', '2010.04.02', 'ddd'

select * from @t1; select * from @t2

select t1.id, t1.name, t2.riqi, t2.renwu from @t1 as t1
left join (select * from @t2) as t2
on t1.id=t2.id
/* result:
id name riqi renwu
01 张三 2010.01.01 aaa
01 张三 2010.02.02 bbb
02 李四 2010.03.01 ccc
02 李四 2010.04.02 ddd
*/

--LZ要得到那两条记录,不知道这中间还有什么条件限制,我也是在瞎猜,下面代码试下,能得到这样的结果:
select t1.id, t1.name, t2.riqi, t2.renwu from @t1 as t1
left join (select * from @t2) as t2
on t1.id=t2.id
where datepart(day, cast(riqi as smalldatetime))=1
/* result:
id name riqi renwu
01 张三 2010.01.01 aaa
02 李四 2010.03.01 ccc
*/

wuyq11 2010-04-25
  • 打赏
  • 举报
回复
select tb1.id,tb1.name,tb2.riqi,tb2.renwu from tb1 left join
(
select a.* from tb2 a where riqi = (select min(riqi) from tb2 where id= a.id)
) as tb2 on tb1.id=tb2.id

select tb1.id,tb1.name,tb2.riqi,tb2.renwu from tb1 left join
(
select a.* from tb2 a where not exists(select 1 from tb2 where id= a.id and riqi< a.riqi)
) as tb2 on tb1.id=tb2.id
yufenghua 2010-04-25
  • 打赏
  • 举报
回复
个人觉得干脆分两句写得了,这么写不累啊?
daojie 2010-04-25
  • 打赏
  • 举报
回复
条件只要让它们的主键相等
hailiu123 2010-04-25
  • 打赏
  • 举报
回复
各位帮帮忙!!!!
zhujiazhi 2010-04-25
  • 打赏
  • 举报
回复
select tb1.*, riqi from tb1 left join
(select min(riqi) as riqi from tb2 group by id) as tb2 on tb2.id = tb1.id

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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