[英]SQL - Delete row based on number of rows in another table
我将如何基于另一个名为“ replies”的表(使用“ subject_id”列作为引用)在行中的行数从表“ subjects”中删除具有主ID“ subject_id”的行。
伪代码示例:If('subject'的回复少于1个){delete'subject'}
我对SQL触发器了解不多,所以我不知道是否可以将其直接合并到数据库中,或者是否必须编写一些PHP代码来处理这个问题...
要删除没有答复的任何主题,此查询应能解决问题:
DELETE s.* FROM subjects AS s
WHERE NOT EXISTS
(
SELECT r.subject_id
FROM replies AS r
WHERE r.subject_id = s.subject_id
);
演示: DB Fiddle示例
MySQL专家之一需要权衡是否可以直接执行此操作,但是在PHP中,您可以...
$query = "SELECT subject_id FROM subjects WHERE subject='test'";
$return = mysqli_query($mysqli, $query);
$id = mysqli_fetch_assoc($return);
$query = "SELECT reply_id FROM replies WHERE subject_id='".$id[0]."'";
$return = mysqli_query($mysqli, $query);
if(mysqli_num_rows($return) < 1){
$query = "DELETE FROM subjects WHERE subject_id='1'";
$return = mysqli_query($mysqli, $query);
}
本示例假定“主题”是唯一的。 换句话说,选择WHERE subject ='test'只会返回一个subject_id。 如果您是定期清理,则将获取所有subject_id值(没有WHERE子句),并循环遍历它们,如果没有答复,则将其删除。
您可以通过从replies
表中选择所有(唯一)主题ID,然后删除其中没有答复的所有主题,在一个查询中实现此目的。 使用SELECT DISTINCT
,您不会多次获得ID(如果一个主题有多个答复),因此不会获得不必要的数据。
DELETE FROM subjects
WHERE subject_id NOT IN (SELECT DISTINCT subject_id FROM replies)
没有回复的任何主题都应删除!
因此,您想删除所有主题而没有回复:
DELETE FROM subjects WHERE subject_id NOT IN
(SELECT subject_id FROM replies);
我想这就是你想要的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.