如何使此SQL查询再次起作用

时间:2015-04-11 15:20:04

标签: sql firebird

此查询过去工作正常,但是培训师表不再包含名称字段,因此很明显它不再起作用。培训师表包含person_id,培训师是人员表中的人员。使用其他一些机制(嵌套选择,自联接,...)我需要从培训师表中获取person_id,然后从人员表中获取培训师名称,然后以与原始查询相同的格式返回信息。这可以用一个陈述来完成吗?

SELECT 
    entries.entry_id, entries.entry_no, dogs.name, 
    persons.name, trainers.name 
FROM 
    entries 
JOIN 
    dogs ON entries.dog_id = dogs.dog_id
JOIN 
    persons ON dogs.owner = persons.person_id
JOIN 
    trainers ON entries.trainer_id = trainers.trainer_id
WHERE 
    entries.show_id = 5

2 个答案:

答案 0 :(得分:3)

是的,只需与人进行额外的加入。另外:养成为你加入的每个表使用别名的习惯。它增加了可读性,你必须减少输入。

SELECT e.entry_id, e.entry_no, d.name, p.name, tp.name
  FROM entries e
  JOIN dogs d ON e.dog_id = d.dog_id
  JOIN persons p ON d.owner = p.person_id
  JOIN trainers t ON e.trainer_id = t.trainer_id
  JOIN persons tp ON tp.person_id = t.person_id
  WHERE e.show_id = ?

答案 1 :(得分:0)

  1. 从选择字段列表中删除trainers.name
  2. 在person.id = trainers.trainer_id
  3. 上添加JOIN person tname
  4. 添加tname.name以选择字段列表
  5. 应该这样做(如果我正确阅读你的文字)