为字段指定限定表名的替代解决方案

时间:2012-10-09 18:32:53

标签: mysql sql

关于MySQL中的Column '' in field list is ambiguous错误。如果mysql无法确定字段名称属于哪个表,则会导致它。有没有人知道为字段指定限定表名的不同方法,而不是将表名添加到字段本身前面。假设我有一个像这样的字段列表

INSERT INTO dupes 
   ( lead_id,set_id,upload_date,agent,callcenter
    ,generation_date,vendors,first_name
    ,last_name,email,phone,address,city,state,zip,dob
    ,gender,marital_status,rented,year,make,model,trim
    ,vin,primary_use,miles_oneway,mileage,license_num,license_state
    ,education,job_title,license_status)

(SELECT lead_id,set_id,upload_date,agent,vendors,callcenter
    ,generation_date,first_name,last_name
    ,email,phone,address,city,state,zip,dob,gender,marital_status
    ,rented,year,make,model,trim,vin,primary_use,miles_oneway
    ,mileage,license_num,license_state,education,job_title
    ,license_status 
 FROM leads_auto 
 JOIN (
    SELECT vendors, email, MIN(lead_id) min_lead_id 
    FROM leads_auto 
    WHERE vendors = 1762
    GROUP BY vendors, email) y 
 ON    y.vendors = leads_auto.vendors 
   AND y.email = leads_auto.email 
   AND leads_auto.lead_id <> y.min_lead_id)

现在我正在考虑使用GROUP_CONCAT([fields] SEPARATOR ',[table name].')将字段添加到变量中,然后执行它。还有其他人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我可以立即看到字段“电子邮件”含糊不清,因为它存在于您的第一个表lead_auto中,并且您在JOIN中选择它。当您使用JOIN时,您应该在所有SELECTions前面加上一个显式的表别名,如下所示:

SELECT la.lead_id,la.set_id,la.upload_date,...  
FROM leads_auto la
JOIN (SELECT ...) y
...

通过这种方式,您可以引用la.field_namey.field_name并明确指出您的意思。

答案 1 :(得分:0)

只是一个建议,但我会按照INSERT子句中的顺序列出SELECT列名称。