Sql不是唯一的表/别名

时间:2017-07-12 11:30:50

标签: mysql sql sql-server

我有SQL查询:

SELECT leads.lead_id,
       attributes.code     AS attributeCode,
       leads_notes.content AS noteContent,
       leads_notes.task_type_id,
       task_types.type_name
FROM   leads,
       leads_notes
       INNER JOIN task_types
               ON task_types.task_type_id = leads_notes.task_type_id
       INNER JOIN leads_attributes
               ON leads_attributes.lead_id = leads.lead_id
       INNER JOIN attributes
               ON attributes.attribute_id = leads_attributes.attribute_id
       INNER JOIN leads_notes
               ON leads_notes.lead_id = leads.lead_id
WHERE  ( leads.ambassador = 1
          OR leads.rents_bike = 1 )
       AND ( leads.city <> '' )
       AND ( leads.address <> ''
              OR leads.address2 <> '' )
       AND ( leads.country_id <> '' )
       AND ( leads_attributes.attribute_id IN ( $attributes_id ) )
       AND ( leads.lead_id = $lead_id ) 

但我得到错误:

  

语法错误或访问冲突:1066不唯一的表/别名:   &#39; leads_notes&#39;&#39;

我该如何解决?感谢。

2 个答案:

答案 0 :(得分:0)

从不DELIMITER $$; DROP PROCEDURE IF EXISTS `myProc`; $$ CREATE DEFINER=`root`@`%` PROCEDURE `myProc`( IN in_userId int, IN in_projectId int ) BEGIN DECLARE tmp_courseId int; DECLARE done TINYINT DEFAULT 0; DECLARE cursorProjectCourse CURSOR FOR SELECT CourseId FROM XC_PROJECT_COURSE where projectId = in_projectId ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cursorProjectCourse; read_loop: LOOP FETCH FROM cursorProjectCourse INTO tmp_courseId; IF done = 1 THEN LEAVE read_loop; END IF; SELECT tmp_courseId, in_userId; END LOOP; CLOSE cursorProjectCourse; END;$$ DELIMITER ; 子句中使用逗号。 始终使用正确的FROM语法。

在您的情况下,您在JOIN子句中也有lead_notes次。如果使用表别名,则更容易编写和读取查询:

FROM

答案 1 :(得分:0)

您已添加leads_notes表格double:一个在leads表后面,另一个在inner join表中,因此请删除一个解决您的问题,如下所示

SELECT leads.lead_id,
       attributes.code     AS attributeCode,
       leads_notes.content AS noteContent,
       leads_notes.task_type_id,
       task_types.type_name
FROM   leads
       INNER JOIN task_types
               ON task_types.task_type_id = leads_notes.task_type_id
       INNER JOIN leads_attributes
               ON leads_attributes.lead_id = leads.lead_id
       INNER JOIN attributes
               ON attributes.attribute_id = leads_attributes.attribute_id
       INNER JOIN leads_notes
               ON leads_notes.lead_id = leads.lead_id
WHERE  ( leads.ambassador = 1
          OR leads.rents_bike = 1 )
       AND ( leads.city <> '' )
       AND ( leads.address <> ''
              OR leads.address2 <> '' )
       AND ( leads.country_id <> '' )
       AND ( leads_attributes.attribute_id IN ( $attributes_id ) )
       AND ( leads.lead_id = $lead_id )