我有3个表:链接,关键字和keywords_links。 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'
)
答案 0 :(得分:0)
尝试分隔sqls(表格为1),删除链接,删除该链接的所有keywords_links并删除所有关键字NOT IN
(或NOT EXISTS
)keywords_links表。
通过这种方式,您可以删除仅由此链接使用的所有关键字(如果关键字是其他链接中的用户将位于keywords_links中且不会被删除)。
或者您可以在链接中执行两个触发器:on delete
,在keywords_links中使用on delete
答案 1 :(得分:0)
而不是INNER JOIN
,您需要LEFT JOIN
并在相关表links
中查找NULL。请先使用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