连表查询的问题

haitr 2009-04-03 11:02:11
actiongroup:

id action groupid
----------- ----------------- -----------------
1 anzhuangluntan 1
2 guanlibanzhu 1
3 guanlitiezi 1
4 guanlibanzhu 2
5 guanlitiezi 2
6 guanlitiezi 3

action:

id actionname action
----------- ----------------- -----------------
1 安装论坛 anchuangluntan
2 管理版主 guanlibanzhu
3 管理帖子 guanlitiezi

现在又两张表:actiongroup,action
需求:根据actiongroup表中的groupid获取action表中的actionname

比如groupid=1时输出管理论坛,管理版主,管理帖子
groupid=2时输出管理版主,管理帖子
groupid=3时输出管理帖子

...全文
123 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

if object_id('[action]') is not null
drop table [action]
go
create table [action](id int, actionname varchar(20), [action] varchar(20))
----------- ----------------- -----------------
insert [action] select 1 , '安装论坛', 'anchuangluntan'
insert [action] select 2 , '管理版主', 'guanlibanzhu'
insert [action] select 3 , '管理帖子', 'guanlitiezi'
go
if object_id('actiongroup') is not null
drop table actiongroup
go
create table actiongroup(id int, [action] varchar(20), groupid varchar(20))
----------- ----------------- -----------------
insert actiongroup select 1 , 'anchuangluntan', 1
insert actiongroup select 2 , 'guanlibanzhu' , 1
insert actiongroup select 3 , 'guanlitiezi' , 1
insert actiongroup select 4 , 'guanlibanzhu' , 2
insert actiongroup select 5 , 'guanlitiezi' , 2
insert actiongroup select 6 , 'guanlitiezi' , 3
go

select * from action

select * from actiongroup
--表连接
select ag.id,a.actionname,ag.action
from action a,actiongroup ag
where a.action = ag.action
and ag.groupid = 1
--子查询
select ag.id,actionname=(select actionname from action where action=ag.action),ag.action
from actiongroup ag where ag.groupid = 1
/**
id actionname action
----------- -------------------- --------------------
1 安装论坛 anchuangluntan
2 管理版主 guanlibanzhu
3 管理帖子 guanlitiezi

(所影响的行数为 3 行)

id actionname action
----------- -------------------- --------------------
1 安装论坛 anchuangluntan
2 管理版主 guanlibanzhu
3 管理帖子 guanlitiezi

(所影响的行数为 3 行)

**/
华夏小卒 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 htl258 的回复:]
SQL code-->生成测试数据
if object_id('[action]') is not null
drop table [action]
go
create table [action](id int, actionname varchar(20), [action] varchar(20))
----------- -¡­
[/Quote]

正解,不写了
  • 打赏
  • 举报
回复
你这个挺怪的,感觉是用[action]字段来联系两个表的?

-->生成测试数据
if object_id('[action]') is not null
drop table [action]
go
create table [action](id int, actionname varchar(20), [action] varchar(20))
----------- ----------------- -----------------
insert [action] select 1 , '安装论坛', 'anchuangluntan'
insert [action] select 2 , '管理版主', 'guanlibanzhu'
insert [action] select 3 , '管理帖子', 'guanlitiezi'
go
if object_id('actiongroup') is not null
drop table actiongroup
go
create table actiongroup(id int, [action] varchar(20), groupid varchar(20))
----------- ----------------- -----------------
insert actiongroup select 1 , 'anchuangluntan', 1
insert actiongroup select 2 , 'guanlibanzhu' , 1
insert actiongroup select 3 , 'guanlitiezi' , 1
insert actiongroup select 4 , 'guanlibanzhu' , 2
insert actiongroup select 5 , 'guanlitiezi' , 2
insert actiongroup select 6 , 'guanlitiezi' , 3
go

declare @id int
set @id=3 --输入groupid
select a.* from [action] a,actiongroup b where a.[action]=b.[action] and b.groupid=@id
kakaluote1987 2009-08-21
  • 打赏
  • 举报
回复
xia nai nai
htl258_Tony 2009-04-04
  • 打赏
  • 举报
回复
-->生成测试数据
if object_id('[action]') is not null
drop table [action]
go
create table [action](id int, actionname varchar(20), [action] varchar(20))
----------- ----------------- -----------------
insert [action] select 1 , '安装论坛', 'anchuangluntan'
insert [action] select 2 , '管理版主', 'guanlibanzhu'
insert [action] select 3 , '管理帖子', 'guanlitiezi'
go
if object_id('actiongroup') is not null
drop table actiongroup
go
create table actiongroup(id int, [action] varchar(20), groupid varchar(20))
----------- ----------------- -----------------
insert actiongroup select 1 , 'anzhuangluntan', 1
insert actiongroup select 2 , 'guanlibanzhu' , 1
insert actiongroup select 3 , 'guanlitiezi' , 1
insert actiongroup select 4 , 'guanlibanzhu' , 2
insert actiongroup select 5 , 'guanlitiezi' , 2
insert actiongroup select 6 , 'guanlitiezi' , 3
go

select a.*,b.id actioncolumnid
from [action] a
join actiongroup b
on a.id=b.id
where a.id >=1
/*
id actionname action actioncolumnid
----------- -------------------- -------------------- --------------
1 安装论坛 anchuangluntan 1
2 管理版主 guanlibanzhu 2
3 管理帖子 guanlitiezi 3

(3 行受影响)
*/
select a.*,b.id actioncolumnid
from [action] a
join actiongroup b
on a.id=b.id
where a.id >=2
/*
id actionname action actioncolumnid
----------- -------------------- -------------------- --------------
2 管理版主 guanlibanzhu 2
3 管理帖子 guanlitiezi 3

(2 行受影响)
*/
select a.*,b.id actioncolumnid
from [action] a
join actiongroup b
on a.id=b.id
where a.id >=3
/*
id actionname action actioncolumnid
----------- -------------------- -------------------- --------------
3 管理帖子 guanlitiezi 3

(1 行受影响)
*/
这样?
haitr 2009-04-04
  • 打赏
  • 举报
回复
多谢各位前辈的回复。不过好像是我表达的不够明确, 呵呵,action表的全部是这样的
id actionname action actioncolumnid
----------- ----------------- ------------ --------------
1 安装论坛 anchuangluntan 1
2 管理版主 guanlibanzhu 2
3 管理帖子 guanlitiezi 3

而我想要的结果是, 如果groupid为1的话输出
id actionname action actioncolumnid
----------- ----------------- ------------ --------------
1 安装论坛 anchuangluntan 1
2 管理版主 guanlibanzhu 2
3 管理帖子 guanlitiezi 3

如果groupid为2的话输出
id actionname action actioncolumnid
----------- ----------------- ------------ --------------
2 管理版主 guanlibanzhu 2
3 管理帖子 guanlitiezi 3
如果groupid为3的话输出
id actionname action actioncolumnid
----------- ----------------- ------------ --------------
3 管理帖子 guanlitiezi 3


我想要的结果是数据行,而不是简单的字符串, 呵呵, 希望前辈们指点一下
  • 打赏
  • 举报
回复
htl 强大
htl258_Tony 2009-04-04
  • 打赏
  • 举报
回复
-->生成测试数据
if object_id('[action]') is not null
drop table [action]
go
create table [action](id int, actionname varchar(20), [action] varchar(20))
----------- ----------------- -----------------
insert [action] select 1 , '安装论坛', 'anchuangluntan'
insert [action] select 2 , '管理版主', 'guanlibanzhu'
insert [action] select 3 , '管理帖子', 'guanlitiezi'
go
if object_id('actiongroup') is not null
drop table actiongroup
go
create table actiongroup(id int, [action] varchar(20), groupid varchar(20))
----------- ----------------- -----------------
insert actiongroup select 1 , 'anzhuangluntan', 1
insert actiongroup select 2 , 'guanlibanzhu' , 1
insert actiongroup select 3 , 'guanlitiezi' , 1
insert actiongroup select 4 , 'guanlibanzhu' , 2
insert actiongroup select 5 , 'guanlitiezi' , 2
insert actiongroup select 6 , 'guanlitiezi' , 3
go
-->本例用自定义函数解决
create function get_str(@id int)
returns varchar(200)
as
begin
declare @s varchar(200)
select @s=isnull(@s+',','')+actionname from [action] where @id<=id
return @s
end
go
-->开始查询
select *,dbo.get_str(groupid) actionname from actiongroup
-->结果
/*
id action groupid actionname
----------- -------------------- -------------------- -----------------------------
1 anzhuangluntan 1 安装论坛,管理版主,管理帖子
2 guanlibanzhu 1 安装论坛,管理版主,管理帖子
3 guanlitiezi 1 安装论坛,管理版主,管理帖子
4 guanlibanzhu 2 管理版主,管理帖子
5 guanlitiezi 2 管理版主,管理帖子
6 guanlitiezi 3 管理帖子

(6 行受影响)
*/
-->删除自定义函数、测试表
drop function dbo.get_str
drop table actiongroup,[action]
-狙击手- 2009-04-03
  • 打赏
  • 举报
回复
select *,
case when groupid = 1 then '管理论坛,管理版主,管理帖子'
when groupid = 2 then '管理版主,管理帖子'
else '管理帖子' end
from actiongroup:

34,576

社区成员

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

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