求一SQL语句!

杨米格 2010-06-13 01:03:05
有两张表

第一张存储工人的姓名和ID
Worker
---------------
ID,Name

第二张存储文件的发件人,收件人,和文件内容
Files
---------------
SenderID,CheckerID,Content
发件人和收件人均来自Woker表

现在我知道发件人的ID,要把该发件人发送的文件的中的“发件人姓名”“内容”和“审批人名称”一起选出来,这个SQL该怎么写?

先谢谢大家!
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2010-06-13
  • 打赏
  • 举报
回复
帮顶
没事!不懂可以慢慢学,任何人刚开始都不懂。
永生天地 2010-06-13
  • 打赏
  • 举报
回复
对应5楼的连接写法
Select 
sender.Name sender,
checker.name checker,
Files.Content
FROM Files
left Join Worker sender on sender.ID=Files.SenderID
left Join Worker checker on checker.ID=Files.CheckerID
WHERE sender.Type=@Type
And Files.Time>=@TimeFrom AND Files.Time<@TimeTo
And checker.name=@name
杨米格 2010-06-13
  • 打赏
  • 举报
回复
谢谢"maco_wang",我是个Flash程序员,看着数据库就头疼,呵呵,惭愧!
杨米格 2010-06-13
  • 打赏
  • 举报
回复
谢谢"josy”,现在我更糊涂了,都怪我没有把问题说清楚,刚才只是想把问题简单化,这样能快速得到答案,呵呵。

其实,Worker表还有字段Type,表示工人类型
Worker
---------------
ID,Name,Type

Files表有字段Time表示文件发送时间
---------------
SenderID,CheckerID,Content,Time


用户输入工人类型和时间段,返回对应的记录,
以前不需要收件人姓名,所以很容易
Select Worker.Name,Files.Content FROM Worker,Files WHERE Worker.Type=@Type And Worker.ID=Files.SenderID And Files.Time>=@TimeFrom AND Files.Time<@TimeTo

现在,楼上的朋友提醒我用Join,我甚至不知道该写在什么地方,惭愧!惭愧!

请大家再帮我一下。
叶子 2010-06-13
  • 打赏
  • 举报
回复
上面用的是函数

联查的话:
select a.senderid,b.name as sender,a.content,c.name as checkerr,d.name as receiver
from Files a
join Worker b on a.senderid=b.id
join Worker c on a.checkerid=c.id
join Worker d on a.ReceiveID=d.id
/*
senderid sender content checkerr receiver
----------- ------ -------- -------- --------
1 张三 你好 王五 李四
1 张三 你在家吗 王五 刘六
*/
叶子 2010-06-13
  • 打赏
  • 举报
回复

--> 测试数据: @Worker
CREATE table Worker(ID int,Name varchar(4))
insert into Worker
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五' union all
select 4,'刘六'
GO
select * from Worker
--> 测试数据: @Files
CREATE table Files(SenderID int,ReceiveID int,CheckerID int,Content varchar(8))
insert into Files
select 1,2,3,'你好' union all
select 1,4,3,'你在家吗'

select * from Files
GO
create function GetNameById(@ID int)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @NAME VARCHAR(20)
SELECT @NAME =NAME FROM Worker WHERE ID=@ID
return @NAME
END
GO
select dbo.GetNameById(SenderID) AS Sender,dbo.GetNameById(ReceiveID) AS Receive,
dbo.GetNameById(CheckerID) AS Checker,[Content] from Files

/*
Sender Receive Checker Content
---------- ---------- ---------- --------
张三 李四 王五 你好
张三 刘六 王五 你在家吗
*/
百年树人 2010-06-13
  • 打赏
  • 举报
回复
select b.senderid,a.name,b.content,c.name
from files b
join worker a on b.senderid=a.id
join worker c on b.checkerid=c.id
叶子 2010-06-13
  • 打赏
  • 举报
回复
联合查询就可以了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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