求一条sql语句怎么写, 一个表单中的一个字段, 是另一个表单中的id, 要求查出另一个表单的某个字段

bizshow 2008-02-22 06:20:32
例如
表一
id name class ... ... ...
1 香蕉 1
2 荔枝 1
3 菠菜 2
4 大米 3
...

表二
id name
1 水果
2 蔬菜
3 粮食

我想select出来的结果是:
id name className ... ... ...
1 香蕉 水果
2 荔枝 水果
3 菠菜 蔬菜
4 大米 粮食

请问要怎么写? 谢谢啦...
...全文
151 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL99000 2008-02-22
  • 打赏
  • 举报
回复
if object_id('表一') is not null
drop table 表一
if object_id('表二') is not null
drop table 表二
go
create table 表一(id int,name varchar(10),class int)
insert into 表一
select 1, '香蕉', 1 union all
select 2, '荔枝', 1 union all
select 3, '菠菜', 2 union all
select 4, '大米', 3
create table 表二(id int,name varchar(10))
insert into 表二
select 1, '水果' union all
select 2, '蔬菜' union all
select 3, '粮食'

select a.id,a.name,isnull(b.name,'') as className from 表一 a left join 表二 b
on a.class=b.id

楼主 接分了
bizshow 2008-02-22
  • 打赏
  • 举报
回复
呵呵,非常感谢, 又学到on的用法了
这下可惨我了, 以前的代码因为不知道这个用法, 都是查两个表, 然后再循环表二枚举出className
看来程序又有很多地方要改了...
bizshow 2008-02-22
  • 打赏
  • 举报
回复
很难决定饿... 貌似liangCK 与happyflystone 回答的是差不多的东东啊, 每人10分有点不公平吧
-狙击手- 2008-02-22
  • 打赏
  • 举报
回复
楼主比我快30秒,
bizshow 2008-02-22
  • 打赏
  • 举报
回复
感谢happyflystone 和liangCK , 可惜只有20分, 先回答的2/3, 没有意见吧...
liangCK 2008-02-22
  • 打赏
  • 举报
回复
结帖吧.
每人10分
-狙击手- 2008-02-22
  • 打赏
  • 举报
回复
感谢1楼的,   如果我表一中有很多字段,   不想一一列出,   打算用*,   可是这样又把表二的所有字段都取出来了,   应该怎么做呢?

---


select a.*,
b.name as classname
from table1 a
left join table2 b
on a.class = b.id
bizshow 2008-02-22
  • 打赏
  • 举报
回复
4楼, 5楼, 哈哈, 其实我就是在*号前面加上表一就可以了
select 表一.*, 表二.name as className from 表一 left join 表二 on class = 表二.id
不需要动态构造显示, 也没有5楼那么长的代码
liangCK 2008-02-22
  • 打赏
  • 举报
回复
select a.id,a.name
,isnull(b.name,'') classname
from 表1 a
left join 表2 b
on a.class=b.id
-狙击手- 2008-02-22
  • 打赏
  • 举报
回复
用isnull()
bizshow 2008-02-22
  • 打赏
  • 举报
回复
我已经自己试出来怎么做了, 呵呵, 可是就是当表二没有符合的数据的时候, 查出来的是null值, 请问有什么办法把他变成空格?
liangCK 2008-02-22
  • 打赏
  • 举报
回复
得到表中除Col1、Col2的所有列

例如:userno_fm、userno_to
create table test(
num int identity(1,1),
userno_fm varchar(10),
userno_to varchar(10),
username varchar(10))
select * from test

declare @sql varchar(8000)
select @sql=''
select @sql=@sql+','+[name] from
(select [name] from syscolumns where object_id(N'[test]')=[id] and [name] not in ('userno_fm','userno_to')) A

set @sql='select '+stuff(@sql,1,1,'')+' from [test]'
--print @sql
exec (@sql)

drop table test
liangCK 2008-02-22
  • 打赏
  • 举报
回复
这样就动态构造显示列了..
bizshow 2008-02-22
  • 打赏
  • 举报
回复
感谢1楼的, 如果我表一中有很多字段, 不想一一列出, 打算用*, 可是这样又把表二的所有字段都取出来了, 应该怎么做呢?
liangCK 2008-02-22
  • 打赏
  • 举报
回复
select a.id,a.name
,b.name
from 表1 a
left join 表2 b
on a.class=b.id
-狙击手- 2008-02-22
  • 打赏
  • 举报
回复
select a.id,a.name,b.name as classname,....
from table1 a
left join table2 b on a.class = b.id

34,590

社区成员

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

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