2014-05-02 52 views
1

我试图从从加入吐出一个表中删除行:MySQL查询有什么问题?

DELETE FROM t1 WHERE company_name IN 
    (SELECT company_name FROM t1 
     LEFT OUTER JOIN t2 
     ON t2.company_name = t1.company_name 
     WHERE t2.name IS null) 

Column 'company_name' in field list is ambiguous 

获取,而力图使这个查询这个暧昧的错误?有什么建议么?

+4

'选择company_name'哪一个? 't1'和't2'都有'company_name'字段。 –

+0

哈哈,它说从t1那里,MySQL不明白吗? – vikingcode

+3

这不是'FROM'的意思。当你加入另一张桌子时,所以它不知道是哪一张桌子。你需要具体:'SELECT t1.company_name'。 –

回答

1

的MySQL没有按”当您尝试在同一个查询中从同一个表中尝试UPDATE/DELETE表和SELECT时不喜欢它。

你可以用多表DELETE语法解决这个问题:

DELETE t1 FROM t1 LEFT OUTER JOIN t2 USING (company_name) 
WHERE t2.name IS NULL; 
0

试一下

DELETE FROM t1 WHERE company_name IN (select * from (SELECT t1.company_name FROM t1 LEFT OUTER JOIN t2 ON t2.company_name = t1.company_name WHERE t2.name IS null) t) 
+0

错误:您无法在FROM子句中指定目标表't1'进行更新 – vikingcode

+0

尝试更新回答 –

0

随着错误消息告诉了列名company_name不是唯一的。根据您的需求,我认为这可以解决您的问题,假设你想删除的条目t1不具有相应的行中t2或有一个但name为空:

DELETE FROM 
    t1 
WHERE 
    company_name NOT IN (
     SELECT 
      t2.company_name 
     FROM 
      t2 
     WHERE 
      t2.name IS NOT NULL 
    ) 
+0

您无法在FROM子句中指定目标表't1'进行更新 – vikingcode

+0

为什么不能?我很确定这适用于大多数DBMS。也许我错过了什么? –

+0

这是我得到的错误。 – vikingcode