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

Posted

技术标签:

【中文标题】如何从sql中的两个表之一中搜索【英文标题】:How to search from one of two tables in sql 【发布时间】:2014-02-10 12:38:18 【问题描述】:

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

我正在提供候选人加入公司。在提供时,我会提到加入日期。它将存储在Offered 表中,而不是Joined 表中。

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

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

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

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

现在我的问题是,我想根据加入日期条件创建报告。为此,WHERE 条件是从 C# 传递的。

但我的疑问是,如果候选人还没有加入,where 条件应该从Offered 表中检查。如果候选人加入我,where 条件应该从Joined 表中检查.. 怎么做这..?

【问题讨论】:

【参考方案1】:

与其检查一个是否为空,不如将其放入COALESCE 函数中。在函数内部,您只需先选择 Hire date,如果它为 null,它将返回加入日期。这样您就不必担心他们是否被雇用。如果我正确阅读您的表格,查询将如下所示。

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

【讨论】:

当我执行您的查询时,它会从COALESCE 中给出的第一个表中获取日期。它不是从第二个表中获取的.. COALESCE 只会得到第一个非空值。这就是为什么如果您将加入日期从Joined 表放在第一位,然后从Offered 表中列出加入日期,您将始终得到一个值。 如果我对加入的候选方法执行上述查询,它只从Hiring 表中获取日期。而不是从Joining 表中。所以,我改为COALESCE(j.JoiningDate, h.JoiningDate)..在这种情况下,它从Joining 表中获取日期。但是如果我执行 for yet to join 候选方式,它返回空值,而不是来自Hiring 表。。 我认为这就是你想要的,如果 Hiring 表为空而不是从 Joining 表中获取日期。

以上是关于如何从sql中的两个表之一中搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何编写从两个搜索值返回匹配项的 sql 查询

如何在 SQL Server 数据库中搜索字符串?

如何在 SQL 中使用 contains 从另一个表中搜索关键字

如何在通过变量搜索时从一个表中选择 user_ID 并插入到另一个表中? Python 我的 SQL

如何使用 Laravel 在 LIKE 搜索中使用 ORM 从两个表中获取数据

从 C# 表单中搜索两个访问表