2011-11-04 60 views
3

有了下面的查詢我能找到的數據我想刪除:由左發現如何刪除記錄加入

SELECT ab.id, ab.anlage_id, a.id 
FROM `anlagetobedienung` AS ab 
LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
WHERE a.id IS NULL 

如何做我必須寫一個刪除在anlagetobedienung表中找到的記錄DELETE語句?

+0

在'anlage_new'中找到記錄?您的查詢特別要求'anlagetobedienung'中的行,其中'anlage_new'中沒有**行。你是否想從'anlagetobedienung'刪除? – Benoit

+0

你是對的它應該是anlagetobedienung。更正了這個問題。 – BetaRide

回答

4
DELETE ab 
FROM `anlagetobedienung` AS ab 
LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
WHERE a.id IS NULL 
+0

這就是我的嘗試。我得到#1109 - MULTI DELETE中的未知表'anlagetobedienung',這不是一個錯字問題。 – BetaRide

+0

@BetaRide:表名已被別名。嘗試使用'刪除ab'替換'delete anlagetobedienung' – Andomar

+0

謝謝,這是工作! – BetaRide

0

通常我會說:

delete anlage_new 
where id in (
    SELECT a.id 
    FROM `anlagetobedienung` AS ab 
    LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
    WHERE a.id IS NULL 
) 

即刪除該行,其中主鍵是在選擇的識別記錄刪除的結果。

但根據你的查詢,那些有id = NULL這似乎沒有任何意義。

您能否提供一些示例數據?

你的編輯後,我想說這應該工作:

delete `anlagetobedienung` 
where id in (
    SELECT ab.id 
    FROM `anlagetobedienung` AS ab 
    LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
    WHERE a.id IS NULL 
) 

注:內選擇了「ab.id」,而不是「a.id」這似乎是在原來僅有的一列選擇有可能包含有用的東西。

+0

所以:'刪除anlage_new其中ID爲空'? – Benoit

0
DELETE FROM anlagebedienung aDEL WHERE aDEL.id IN 
(SELECT ab.id 
    FROM `anlagetobedienung` AS ab 
    LEFT JOIN anlage_new AS a ON ab.`anlage_id` = a.id 
    WHERE a.id IS NULL) 
+0

感謝您的回答。這就是我之前已經嘗試過的。結果是:#1064 - 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'aDEL WHERE aDEL.id IN(在第1行選擇ab.id FROM'anlagetobedienung' AS ab L LEF J' – BetaRide

0

另一種可能的解決方案:

DELETE FROM anlagetobedienung A 
WHERE 
    NOT EXISTS (SELECT * FROM anlage_new AN WHERE AN.id = A.anlage_id) 

如果MySQL支持別名,在DELETE FROM(在MS SQL的支持,但我知道,一些主要的RDBMS不支持這一點),那麼你可以做:

DELETE ab 
FROM 
    anlagetobedienung AS ab 
LEFT JOIN anlage_new AS a ON 
    ab.anlage_id = a.id 
WHERE 
    a.id IS NULL 
0

你可以簡單地做:

DELETE FROM anlagetobedienung ab 
WHERE NOT EXISTS (SELECT NULL 
        FROM anlage_new a 
        WHERE a.id = ab.anlage_id 
       )