0

我有 3 个表:链接、关键字和关键字链接。keywords_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'
)
4

2 回答 2

0

尝试分离 sql​​s(表为 1),删除链接,删除该链接的所有关键字链接,并删除所有关键字NOT IN(或NOT EXISTS)keywords_links 表。

这样,您可以删除所有仅由该链接使用的关键字(如果关键字是其他链接中的用户,则将在keywords_links中并且不会被删除)。

或者你可以做两个触发器:on delete在链接和on deletekeywords_links

于 2012-07-22T20:48:25.483 回答
0

而不是 a INNER JOIN,您需要 aLEFT JOIN并在相关表中查找 NULL links。请先用 aSELECT而不是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
于 2012-07-22T20:48:26.730 回答