2012-07-22 47 views
0

我有3個表:鏈接,關鍵字和keywords_links。 keywords_links加入了另外兩個表。現在我試圖編寫一個刪除鏈接的PHP函數。它也將不得不刪除將被刪除的鏈接僅使用的所有關鍵字。我被困在MySQL查詢中以刪除這些關鍵字。MySQL:刪除在另一個表中沒有匹配的行

這就是我現在所擁有的:

DELETE FROM keywords INNER JOIN keywords_links ON keywords_links.keyword_id=keywords.id WHERE keywords_links.link_id='123' AND NOT EXISTS(...?) 

編輯:這似乎是工作,有沒有更有效的方法? (無子查詢?)

DELETE 
FROM keywords 
INNER JOIN keywords_links ON keywords_links.keyword_id = keywords.id 
WHERE keywords_links.link_id = '123' 
AND ! 
EXISTS (
    SELECT * 
    FROM keywords_links 
    WHERE keyword_id = keywords.id 
    AND link_id != '123' 
) 
+0

'links'表是如何關聯的? – 2012-07-22 20:44:38

+0

這就像典型的帖子和標籤表。鏈接有一個id,它通過'keywords_links'錶鏈接到關鍵字。 – 2012-07-22 20:47:06

回答

0

嘗試分離獲得的SQL(1臺),刪除鏈接,刪除該鏈接的所有keywords_links並刪除所有關鍵字NOT IN(或NOT EXISTS)keywords_links表。

通過這種方式,你可以刪除所有僅被這個鏈接使用的關鍵字(如果關鍵字是其他鏈接中的用戶將在關鍵字鏈接中並且它不會被刪除)。

或者你也可以做兩個觸發器:在鏈接中keywords_links

0

相反的INNER JOINon deleteon delete,你需要一個LEFT JOIN和相關表links尋找空值。請首先用SELECT而不是DELETE FROM進行測試。

DELETE FROM 
    keywords 
    LEFT JOIN keywords_links ON keywords.id = keywords_links.keyword_id 
    LEFT JOIN links ON keywords_links.link_id = links.id 
WHERE 
    keywords_links.link_id=123 
    AND links.id IS NULL 
相關問題