比较复杂的sql句子---被select的表某个字段名称存在另外一个表中

fansun 2003-08-16 09:38:29
表a 的内容如下

序号 类别
1 白菜
2 萝卜


表b的内容

序号 姓名 喜欢吃的东西 加入日期
1 a 白菜 2001-2-2
2 b 白菜 2003-5-6
3 c 萝卜 2003-6-6
4 d 苹果 2003-9-6
5 e 白菜 2003-4-6
6 f 辣椒 2006-8-9

目的是
需要

select top 1 * form b where 喜欢吃的东西=‘白菜’
select top 1 * form b where 喜欢吃的东西=‘萝卜’

之所select 白菜和萝卜 是因为 白菜萝卜 在表a中

我的最后的目的就是用一个 sql实现上面的两条句子(如果表a的内容更多当然句子也更多 )的功能

如何实现



...全文
46 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysycrazy 2003-08-16
  • 打赏
  • 举报
回复
如果取第一条应该用下面的:min()
select * from (
select min(序号) as 序号,min(姓名) as 姓名, 喜欢吃的东西,min(加入日期) as 加入日期
from 表b
group by 喜欢吃的东西)
where 喜欢吃的东西 in (select 类别 from 表1)
yoki 2003-08-16
  • 打赏
  • 举报
回复
select * from b x
where 序号 in
(select top 1 y.序号 from b y,a z
where z.类别=x.喜欢吃的东西 and y.喜欢吃的东西=z.类别
order by 加入日期)
ysycrazy 2003-08-16
  • 打赏
  • 举报
回复
select * from (
select max(序号) as 序号,max(姓名) as 姓名, 喜欢吃的东西,max(加入日期) as 加入日期
from 表b
group by 喜欢吃的东西)
where 喜欢吃的东西 in (select 类别 from 表1)
yoki 2003-08-16
  • 打赏
  • 举报
回复
select * from @b b
where b.序号 in
(select top 1 x.序号 from @b x,@a y
where 类别=b.喜欢吃的东西 and x.喜欢吃的东西=y.类别
order by 加入日期)
yoki 2003-08-16
  • 打赏
  • 举报
回复
select b.* from b,
(select min(序号) as 序号,min(加入日期) as 加入日期,喜欢吃的东西 from b group by 喜欢吃的东西) c
where c.序号=b.序号
and b.喜欢吃的东西 in(select 类别 from a)
china666 2003-08-16
  • 打赏
  • 举报
回复
select (select top 1 姓名 form b where 喜欢吃的东西=a.类别) as 姓名 from a
照此可以加b表其它字段
sizheng0320 2003-08-16
  • 打赏
  • 举报
回复
哦,不对,应该用or
sizheng0320 2003-08-16
  • 打赏
  • 举报
回复
问题1:如果表b中直接存储“白菜”、“萝卜”这样的汉字,那么表a有什么用?如果做了代码表,就存储代码吧。

问题2:没看懂你的意思,用and不行吗?

34,874

社区成员

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

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