如何从sql中的两个表中的一个搜索

时间:2014-02-10 12:38:19

标签: sql sql-server join

我在Sql server中使用了两个表OfferedJoined

我提供了一个加入公司的候选人..在提供时,我会提到一个加入日期......它将被存储在Offered表中,不在Joined表..

候选人可以加入不同的日期..加入日期将存储在Joined表中..这不应在Offered表中更新..

现在我正在创建一个结合Offered and Joined Report的报告。在那里,我有一个名为Date of Joining的列。在该列中,日期将来自{{1如果候选人尚未加入,则表格如果候选人加入意味着,日期将来自Offered表..要在表格之间进行选择,我使用了函数..

Joined

我保存了这个函数并在select语句中调用了函数..

现在我的问题是,我想根据加入日期条件创建报告。为此,begin declare @chk int declare @JoiningDate datetime set @chk=0 select @chk=id from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId if(@chk != 0) begin select @JoiningDate=JoiningDate from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId end else begin select @JoiningDate=JoiningDate from MemberHiringDetails where JobPostingId=@JobPostingId and MemberId=@MemberId end return @JoiningDate end 条件从C#传递..

但我怀疑的是,如果候选人尚未加入,那么where条件应该从WHERE表中检查..如果候选人加入我,那么where条件应该从Offered表检查。怎么做...?

1 个答案:

答案 0 :(得分:1)

而不是检查一个是否为空,你应该放入COALESCE函数。在功能内部,您只需先选择租用日期,如果为空,则返回加入日期。这样你就不必担心他们是否被录用了。如果我正确地读表,查询将如下。

SELECT @JoiningDate = COALESCE(h.JoiningDate, j.JoiningDate)
    FROM MemberJoiningDetails AS j
    LEFT OUTER JOIN MemberHiringDetails AS h
        ON j.JobPostingId = h.JobPostingId
           AND j.MemberId = h.MemberId
    WHERE j.JobPostingId = @JobPostingId
        AND j.MemberId = @MemberId