如何从多个表中获取字段

时间:2018-08-18 18:47:11

标签: sql

我想从2个不同的表中获取字段。最后一个字段candidate_score_id具有多对一关系。那么我该如何加入以下2个查询

1)从candidate_score_id表中获取candidate_score

select candidate_score_id from candidate_score a where 
a.assessment_id = NEW.assessment_id and
a.candidate_id = NEW.candidate_id and
a.attempt_Count = NEW.attempt_count;

2)要将不同的字段插入candidate_score_details表中。该表中的字段应通过上面的查询获得。

insert into candidate_score_details(candidate_score_details_id, candidate_id, assessment_id, attempt_count, score_type, score_tag,correct, candidate_score_id)
select uuid();
select a.candidate_id, a.assessment_id,a.attempt_count,"BY-COMPLEXITY",
case c.complexity 
when 1 then "HIGH"
when 2 then "MEDIUM"
when 3 then "LOW" 
end, count(*) from candidate_answer a, answer_key b, question_meta_data c where a.candidate_id = NEW.candidate_id and 
a.assessment_id = NEW.assessment_id and
a.attempt_count = NEW.attempt_count and
a.assessment_id = b.assessment_id and 
a.question_id = b.question_number and 
a.response = b.answer and 
a.question_id = c.question_number 
group by a.candidate_id, a.assessment_id, a.attempt_count, c.complexity;

2 个答案:

答案 0 :(得分:0)

仅查看问题的SQL连接方面,您将需要指定要以“ NEW”引用为第二张表别名的表。如果是这种情况,那么查询将是(用第二个表的名称替换“ OTHER_TABLE_NAME”:

select a.candidate_score_id 
from candidate_score a 
  left join OTHER_TABLE_NAME new on 
   and a.assessment_id = NEW.assessment_id
   and a.candidate_id = NEW.candidate_id 
   and a.attempt_Count = NEW.attempt_count

答案 1 :(得分:0)

似乎查询1在“ candidate_score”表上具有与查询2中的“ candidate_answer”表相同的3个条件。
那么,如何在这3个字段上将“ candidate_score”的LEFT JOIN添加到“ candidate_answer”?

例如:

INSERT INTO candidate_score_details 
(
  candidate_score_details_id, 
  candidate_id, 
  assessment_id, 
  attempt_count, 
  score_type, 
  score_tag,
  correct, 
  candidate_score_id
)
SELECT 
 uuid(), 
 answer.candidate_id, 
 answer.assessment_id,
 answer.attempt_count,
 'BY-COMPLEXITY' AS score_type,
 (CASE meta.complexity 
  WHEN 1 THEN 'HIGH'
  WHEN 2 THEN 'MEDIUM'
  WHEN 3 THEN 'LOW' 
  END) AS score_tag, 
 COUNT(*) AS correct,
 MAX(score.candidate_score_id) AS max_candidate_score_id
FROM candidate_answer AS answer
JOIN answer_key AS akey 
  ON (akey.assessment_id = answer.assessment_id AND akey.question_number = answer.question_id AND akey.answer = answer.response)
LEFT JOIN candidate_score AS score 
  ON (score.candidate_id = answer.candidate_id AND score.assessment_id = answer.assessment_id AND score.attempt_count = answer.attempt_count)
LEFT JOIN question_meta_data AS meta 
  ON meta.question_number = answer.question_id
WHERE answer.candidate_id = NEW.candidate_id 
  AND answer.assessment_id = NEW.assessment_id
  AND answer.attempt_count = NEW.attempt_count
GROUP BY answer.candidate_id, answer.assessment_id, answer.attempt_count, meta.complexity;