简单加入查询帮助

时间:2015-10-02 12:58:14

标签: mysql

我在修复此查询时需要一些帮助。这个问题很简单,但我还是无法解决。让我解释它目前的工作背景,然后解释我需要整合的内容。

首先,这是我目前的表格。

候选人表

候选人表列出了所有求职者。

candidates
-----------
id
hash
first_name
last_name

这是候选人表的转储:

id  hash                              first_name  last_name  
 1  092ee63c6698851ba72183388bff1b3b  Jonathan    Kushner    
 2  2d234affe1d08c3394cd499f297d7380  Dustin      Kushner   

文件表

文件表列出了系统中的所有文件

documents
----------
id
hash
title
source_file

这是文档表的转储:

id  hash             title       
 1  436etgfgdggdd    Associate Sales Resume
 2  54645655gggdgdg  Senior Officer Cover Letter
 3  ffsafsdsfdfdssf  Customer Service Resume

职位表

jobs表列出了系统中的所有作业

jobs
----------
id
hash
title

这里是工作表的转储:

id  hash             title       
 1  asfsfafafafdf    Associate Sales Position
 2  fddfd7sd7sd7sd7  Senior Officer Position
 3  f9df89df8sd89sd  Customer Service Position

candidates_jobs表

candidates_jobs表将候选人连接到工作

candidates_jobs
----------
id
hash
candidate_id
job_id

这里是candidate_jobs表的转储:

id  hash                             job_id   candidate_id
 1  89efaed413163be4557133266ce295b4 1        1  
 2  afsdfdssdfsdfsdfsdfsdfsdfsdfsdfd 1        2
 3  df08dfs08sd80sdf80sdf80sd8sd8sd8 1        3

candidates_jobs_documents

candidates_jobs_documents表根据作业将文档连接到候选人。

candidates_jobs_documents
----------
id  hash                             job_id   candidate_id  document_id
 1  saasdfasdasdasdasdasdasdasdasdas 1        1             1  
 2  dfasasasasasasasasdddsdasdasdasd 1        2             2
 3  sdfsdfsdsdsdfadfsssssssddssdsdfd 1        3             3

行。现在让我告诉你我当前的疑问:

    SELECT        
      `users`.`first_name`,
      `users`.`last_name`,
      `documents`.`title`
    FROM
      `documents` 
      LEFT JOIN `candidates_jobs_documents` 
        ON `candidates_jobs_documents`.`document_id` = `documents`.`id` 
      LEFT JOIN `jobs` 
        ON `jobs`.`id` = `candidates_jobs_documents`.`job_id` 
      LEFT JOIN `candidates`
        ON candidates.id = candidates_jobs_documents.candidate_id 
      LEFT JOIN `candidates_jobs` 
        ON `candidates_jobs`.`candidates_id` = `candidates`.`id` 
    ORDER BY `candidates`.`last_name` ASC

我想我需要在candidate.id和candidate.id上对candidate_jobs_documents表使用INNER JOIN,但是我无法弄清楚如何使用查询来处理它。另外,我不知道如何使用我的WHERE子句。

查询不对。我需要根据工作获取特定候选人的文件。如您所知,这些文件固定在候选人的工作上,使候选人能够上传任何工作的文件,并将该文件作为该特定工作的文件。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

SELECT candidates.first_name, candidates.last_name, documents.title
FROM candidates, documents, candidates_jobs_documents
WHERE candidates.id = candidates_jobs_id.candidate_id AND 
documents.id = candidates_jobs_documents.document_id
ORDER BY candidates.last_name ASC;

不确定这是否是您需要的,但也许。我对candidate_jobs_documents表有点困惑......也许你真的想在那里候选_jobs.id而不是candidate.id和job_id?

答案 1 :(得分:0)

列出Jonathan Kushner申请副销售职位所创建的所有文件的示例。

SELECT        
`users`.`first_name`,
`users`.`last_name`,
`docs`.`title`
FROM
`candidates` as `users`
INNER JOIN (
  `candidates_jobs_documents` AS cjd
  INNER JOIN `jobs` AS j ON (cjd.`job_id` = j.id)
  INNER JOIN `documents` AS `docs` ON (cjd.`document_id` = docs.id)
) ON (`users`.id = cjd.`candidate_id`)
WHERE
j.title = 'Associate Sales Position'
AND users.first_name = 'Jonathan'
AND users.last_name = 'Kushner'

以下是SQL Fiddle的工作代码预览:http://sqlfiddle.com/#!9/9b16c/1