簡體   English   中英

MySQL:刪除另一個表中不匹配的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM