如何在一个查询中两次使用表中的相同字段

时间:2016-01-19 20:16:48

标签: mysql

我有两张桌子:电话和员工。在调用表中,我有一个字段enter_emp_id和另一个follow_emp_id。它们包含员工进入呼叫的值以及分配给呼叫的员工。我的第二个表员工包含employee_idemployee个字段。我能够编写一个查询来显示结果,其中包含进入呼叫的员工姓名,但不会分配给谁。我在查询中确实有其他值,但我需要在结果中显示第二个员工姓名。以下是我目前使用的内容:

SELECT 
  `calls`.`call_id`,
  `calls`.`enter_date`,
  `call_state`.`call_state`,
  `customers`.`customer_name`,
  `calls`.`comments`,
  `employees`.`employee`,
  `call_reasons`.`call_reason`
FROM
  `customers`
  INNER JOIN `calls` ON (`customers`.`customer_id` = `calls`.`customer_id`)
  INNER JOIN `employees` ON (`employees`.`employee_id` = `calls`.`enter_emp_id`)
  INNER JOIN `call_state` ON (`call_state`.`call_state_id` = `calls`.`call_state_id`)
  INNER JOIN `call_reasons` ON (`call_reasons`.`call_reason_id` = `calls`.`call_reason_id`)
WHERE
  `calls`.`call_id` = $call_id;

3 个答案:

答案 0 :(得分:2)

我希望我理解你的问题。您可以使用AS更改或缩短sql用法的表名

  SELECT 
      `calls`.`call_id`,
      `calls`.`enter_date`,
      `call_state`.`call_state`,
      `customers`.`customer_name`,
      `calls`.`comments`,
      `employees`.`employee`,
      `assigned`.`employee` as assigned_employee,
      `call_reasons`.`call_reason`
    FROM
      `customers`
      INNER JOIN `calls` ON (`customers`.`customer_id` = `calls`.`customer_id`)
      INNER JOIN `employees` ON (`employees`.`employee_id` = `calls`.`enter_emp_id`)
      INNER JOIN `employees` AS `assigned` ON (`assigned`.`employee_id` = `calls`.`follow_emp_id`)
      INNER JOIN `call_state` ON (`call_state`.`call_state_id` = `calls`.`call_state_id`)
      INNER JOIN `call_reasons` ON (`call_reasons`.`call_reason_id` = `calls`.`call_reason_id`)
    WHERE
      `calls`.`call_id` = $call_id;

答案 1 :(得分:2)

您需要为每个员工ID关联加入员工表TWICE ...并使用相应的ALIAS来获取所需的值。并对表进行别名并删除不需要的tick标记。只有可能的保留字冲突才需要。

SELECT 
      c.call_id,
      c.enter_date,
      cs.call_state,
      cust.customer_name,
      c.comments,
      entered.employee,
      assigned.employee as AssignedEmployee,
      cr.call_reason
   FROM
      calls c
         INNER JOIN customers cust
            ON c.customer_id = cust.customer_id
         INNER JOIN employees entered 
            ON c.enter_emp_id = entered.employee_id 
         INNER JOIN employees assigned 
            ON c.enter_emp_id = assigned.employee_id
         INNER JOIN call_state cs 
            ON c.call_state_id = cs.call_state_id
         INNER JOIN call_reasons cr
            ON c.call_reason_id = cr.call_reason_id 
   WHERE
      c.call_id = $call_id;

答案 2 :(得分:0)

感谢以下工作: 选择       c.call_id,       c.enter_date,       cs.call_state,       cust.customer_name,       c.comments,       entered.employee,       entered.employee,       cr.call_reason    从       叫c          INNER JOIN客户托管             ON c.customer_id = cust.customer_id          INNER JOIN员工进入             ON c.enter_emp_id = entered.employee_id          INNER JOIN员工已分配             ON c.enter_emp_id = assigned.employee_id          INNER JOIN call_state cs             ON c.call_state_id = cs.call_state_id          INNER JOIN call_reasons cr             ON c.call_reason_id = cr.call_reason_id    哪里       c.call_id = $ call_id;