sql - 基于 SQL Server 中另一个查询的 Where 子句

标签 sql sql-server t-sql

我的数据库中有 3 个表,分别为 Jobs、JobApplications、Candidates。

他们在这里。

工作

    JobId  | JobTitle
    ---------------------------
    2115   | Software Engineer
    2154   | Accountant
    4562   | Sales Manager
    4569   | Civil Engineer

工作申请

    JobApplicationId  | CandidateId | JobId
    ---------------------------
    8845              | 1120        | 2154
    8912              | 1120        | 4569        
    9120              | 1555        | 2115
    9450              | 1899        | 2115
    9458              | 1991        | 4569
    9488              | 1889        | 4569

候选人

    CandidateId | Email
    ----------------------------
    1120        | [email protected]
    1555        | [email protected]
    1889        | [email protected]
    1991        | [email protected]

我想要的是:一张包含候选人和基于他们之前的申请的 jobId 的表格。
例如:如果有人申请了“软件工程师”职位,我需要将除所申请的职位之外的所有其他标题为“软件工程师”的职位与候选人 ID 一起添加到表中。

有什么办法可以使用 SQL 来实现这一点吗?

有人可以帮我吗?

预期输出如下

    CandidateId | Suggest_jobId
    ------------------------------
    1120        | 3565
    1120        | 8956
    1120        | 4565
    1889        | 8965
    1889        | 4568

因此单个候选人可能有多个工作建议。

最佳答案

我们可以利用一个简单的CTE来完成这项工作

 WITH cte AS 
 (
     SELECT j.JobId,
            j.JobTitle,
            ja.CandidateId 
     FROM JobApplications ja
     JOIN Jobs j ON j.JobId=ja.JobId  
 )
 SELECT j.JobTitle,
        c.CandidateId 
 FROM Jobs j
 JOIN cte c ON j.JobTitle like CONCAT('%',c.JobTitle,'%') AND c.JobId!=j.JobId

关于sql - 基于 SQL Server 中另一个查询的 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333693/

相关文章:

sql - 将所有与不存在的并入并插入

java - SQLite 按日期删除行

mysql - SQL 查询 - 比较临时表中的所有行

sql-server - 使用过滤器减少 SQL 跟踪的开销

SQL:根据 GETDATE() 进行列验证

基于 ROW_Number 的 SQL 查询不起作用

python - SQL/Python - 如何从另一个表返回每个属性和子属性的计数

sql - union 在 PostgreSQL 中没有按预期工作

sql - 如何在 sql server 中为该查询分配列标题/名称?

sql-server - SQL Server 和 Mongo 可以一起使用吗?