2014-05-02 51 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