[英]MySQL: Deleting rows that don't have a match in another table
I have 3 tables: links, keywords, and keywords_links. 我有3个表格:链接,关键字和keyword_links。 keywords_links joins the two other tables.
keyword_links连接其他两个表。 Right now I'm trying to write a PHP function that deletes a link.
现在,我正在尝试编写一个删除链接的PHP函数。 It would also have to delete all the keywords that are only used by the link that will be deleted.
它还将必须删除仅将由要删除的链接使用的所有关键字。 I'm stuck at the MySQL query to delete those keywords.
我被困在MySQL查询中以删除那些关键字。
Here's what I have right now: 这是我现在所拥有的:
DELETE FROM keywords INNER JOIN keywords_links ON keywords_links.keyword_id=keywords.id WHERE keywords_links.link_id='123' AND NOT EXISTS(...?)
Edit: This seems to be working, is there a more efficient way? 编辑:这似乎正在工作,有没有更有效的方法? (with no subqueries?)
(没有子查询?)
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'
)
Try to separate the sqls (1 for table), delete the link, delete all the keywords_links of that link and delete all keywords NOT IN
(or NOT EXISTS
) keywords_links table. 尝试分隔sqls(表为1),删除链接,删除该链接的所有keyword_links并删除所有关键字
NOT IN
(或NOT EXISTS
)的keyword_links表。
In that way you can delete all keywords which are only used by this link (if a keyword is user in other link will be in keywords_links and it don't be deleted). 这样,您可以删除该链接仅使用的所有关键字(如果其他链接中的用户是关键字,它将在keyword_links中并且不会被删除)。
Or you can do two Triggers: on delete
in links and on delete
in keywords_links 或者你也可以做两个触发器:
on delete
的链接,并on delete
中keywords_links
Instead of an INNER JOIN
, you need a LEFT JOIN
and look for NULLs in the related table links
. 您需要使用
LEFT JOIN
并在相关的表links
查找NULL,而不是INNER JOIN
。 Please test this first with a SELECT
instead of DELETE FROM
. 请首先使用
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.