只有一个约束的多删除
Multi delete with only one constraint
我有 3 个表,比方说 a、b、c,它们都有一个带有 ID 的列。当来自不同表的行彼此属于彼此时,ID 对应。我想使用 id 从表中删除所有条目。我尝试了以下多重删除:
delete from a,b,c from a,b,c where a.id=123;
以下内容无效
delete from a,b,c from a,b,c where a.id=b.id and b.id=c.id and c.id=123;
因为当 a 和 b 中有一个元素用于 a 或仅在 a 中用于给定 id 时,c 中没有一个元素是强制性的。
根据 the documentation 语法是:
delete a,b,c
from a
LEFT JOIN b ON a.id = b.id
LEFT JOIN c ON a.id = c.id
where a.id=123;
我会设置一个数组并使用它来命名要从具有您要查找的 ID 的每个 table 名称中删除的 table。这样,如果 id 是外键 id,您将拥有更多控制权。 运行 这通过一个 foreach 循环。
$table = array(tablea => a, id =>a), array(tableb => b, id => b)
$sql = "DELETE FROM $table WHERE $where";
我有 3 个表,比方说 a、b、c,它们都有一个带有 ID 的列。当来自不同表的行彼此属于彼此时,ID 对应。我想使用 id 从表中删除所有条目。我尝试了以下多重删除:
delete from a,b,c from a,b,c where a.id=123;
以下内容无效
delete from a,b,c from a,b,c where a.id=b.id and b.id=c.id and c.id=123;
因为当 a 和 b 中有一个元素用于 a 或仅在 a 中用于给定 id 时,c 中没有一个元素是强制性的。
根据 the documentation 语法是:
delete a,b,c
from a
LEFT JOIN b ON a.id = b.id
LEFT JOIN c ON a.id = c.id
where a.id=123;
我会设置一个数组并使用它来命名要从具有您要查找的 ID 的每个 table 名称中删除的 table。这样,如果 id 是外键 id,您将拥有更多控制权。 运行 这通过一个 foreach 循环。
$table = array(tablea => a, id =>a), array(tableb => b, id => b)
$sql = "DELETE FROM $table WHERE $where";