[英]MySQL: Deleting rows that don't have a match in another table
我有3個表格:鏈接,關鍵字和keyword_links。 keyword_links連接其他兩個表。 現在,我正在嘗試編寫一個刪除鏈接的PHP函數。 它還將必須刪除僅將由要刪除的鏈接使用的所有關鍵字。 我被困在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'
)
嘗試分隔sqls(表為1),刪除鏈接,刪除該鏈接的所有keyword_links並刪除所有關鍵字NOT IN
(或NOT EXISTS
)的keyword_links表。
這樣,您可以刪除該鏈接僅使用的所有關鍵字(如果其他鏈接中的用戶是關鍵字,它將在keyword_links中並且不會被刪除)。
或者你也可以做兩個觸發器: on delete
的鏈接,並on delete
中keywords_links
您需要使用LEFT JOIN
並在相關的表links
查找NULL,而不是INNER JOIN
。 請首先使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.