MYSQL中用于删除多个记录的DELETE查询

3

我正在用C语言编写MYSQL程序。我希望删除存储在数组中所有id_no对应的数据库记录。我知道可以在循环中运行查询来删除所有记录。但是问题在于我想要删除的记录非常多(> 300)。所以,我想知道是否有其他更有效的方法可以使用?

unit32_t id_nos[100];
char query[256];

for(int i=0; i< 100; i++) {
   sprintf(query, "DELETE FROM Students WHERE id = '%u'", id_nos[i]);

   if(mysql_query(con, query)) {
     printf("Failed to Delete record successfully\n")
     printf("stderr: %s\n", mysql_error(con));
     mysql_close(con);
     return;
   }
else {
 printf("Record deleted successfully\n");
}

如何获取要删除的ID数组?如果ID数组是通过先前的查询获得的,则可以使用带有连接的删除。 - ScaisEdge
使用 Where In (<“逗号分隔的 ID 列表”>) 子句。 - Harish
@ScaisEdge,id数组是通过先前的SELECT查询获得的。 - user174w
2个回答

1
你可以将id拼接成字符串,并将其传递给“IN”函数

0
如果您的ID是通过先前的查询获得的,您可以使用带有连接的删除方式。这样,您就可以仅使用一个查询删除与子查询返回的ID匹配的所有学生行。
    DELETE Students 
    FROM Students
    INNER JOIN (
        select id from my_prev_table 
        where my_column = 'my_value'

    ) t on t.id = Students.id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接