求一条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 大米 粮食

请问要怎么写? 谢谢啦...
...全文
73 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-22 06:20
社区公告
暂无公告