gpt4 book ai didi

MySQL删除多行(如果存在)

转载 作者:行者123 更新时间:2023-11-29 02:57:52 24 4
gpt4 key购买 nike

首先,感谢您分享您的经验并在我身上浪费时间。我在许多线程中进行了搜索,但仍然找不到我正在寻找的答案。好吧,让我们转向问题。我如何编写一个 MySQL 语句,查看不同表的结果,如果找到合适的结果,它将被删除。这真的很难解释,所以我认为更好的方法是举个例子。

DELETE FROM forum_threads, forum_comments, forum_categories 
USING forum_categories
INNER JOIN forum_threads
INNER JOIN forum_comments
WHERE forum_categories.name = ?
AND forum_threads.category_id = forum_categories.id
AND forum_comments.thread_id = forum_categories.id

上面的代码工作正常,但前提是三个表有一行,否则它返回零行受到影响。

所以,我想写一个语句,从类别、线程和评论表中删除行,如果存在的话,即使其中之一。示例 1:forum_categories 有一行,但是 forum_threads 和 forum_comments 没有,所以只从类别中删除。示例 2:forum_categories 有一行,forum_threads 有多行,但 forum_comments 没有,所以从类别和主题中删除。示例 3:forum_categories 没有任何行,但是 forum_threads 有多行,forum_comments 有多行,所以不要做任何事情。

每个案例 forum_categories 只有一行,forum_threads 和 forum_comments 可以从多个到零。

我尝试使用 LEFT JOIN 无效,或者我做错了。

最佳答案

我的猜测是,简单地更改为 LEFT JOIN 是行不通的,因为 WHERE 子句会创建一个隐式的 INNER JOIN。你必须使用 ON。我不确定为什么 MySQL 甚至允许您编写这样的 JOIN 语法。

尝试:

DELETE forum_threads, forum_comments, forum_categories 
FROM forum_categories
LEFT JOIN forum_threads
ON forum_threads.category_id = forum_categories.id
LEFT JOIN forum_comments
ON forum_comments.thread_id = forum_categories.id
WHERE forum_categories.name = ?;

或者:

DELETE FROM forum_threads, forum_comments, forum_categories 
USING forum_categories
LEFT JOIN forum_threads
ON forum_threads.category_id = forum_categories.id
LEFT JOIN forum_comments
ON forum_comments.thread_id = forum_categories.id
WHERE forum_categories.name = ?;

关于MySQL删除多行(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28547954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com