我需要什么
我有一个名为 dbtuts 的数据库,它共有 7 个表。
表名是 tbl_uploads、variationtable1、variationtable2、variationtable3、variationtable4、variationtable5、variationtable6。
所有这些表都有一个名为 prjId
的列。
我想从 tbl_uploads 表和 variationtable1 到 variationtable6 中删除一行,其中 prjId 可以说是 xxxx 。
但问题是 variationtable1 到 variationtable6 可能有也可能没有 prjId 列的 xxxx 数据。
如果有这样的数据,有什么方法可以让我执行一个将删除 xxxx 的查询。
我的代码
我尝试了以下方法,但它不起作用。
$deleteQuery = "
DELETE
FROM dbtuts.tbl_uploads
, dbtuts.variationtable1
, dbtuts.variationtable2
, dbtuts.variationtable3
, dbtuts.variationtable4
, dbtuts.variationtable5
, dbtuts.variationtable6
WHERE prjId = 'xxxx'
";
$resultDeleteQuery = mysqli_query($conn,$deleteQuery);
有人知道吗?
您可以使用 LEFT JOIN
通过单个查询完成此操作:
DELETE t, v1, v2, v3, v4, v5, v6
FROM dbtuts.tbl_uploads t
LEFT JOIN dbtuts.variationtable1 v1 ON t.prjId = v1.prjId
LEFT JOIN dbtuts.variationtable2 v2 ON t.prjId = v2.prjId
LEFT JOIN dbtuts.variationtable3 v3 ON t.prjId = v3.prjId
LEFT JOIN dbtuts.variationtable4 v4 ON t.prjId = v4.prjId
LEFT JOIN dbtuts.variationtable5 v5 ON t.prjId = v5.prjId
LEFT JOIN dbtuts.variationtable6 v6 ON t.prjId = v6.prjId
WHERE t.prjId = 'xxxx'
Demo here
注意:如果您的数据库模式设计得当,则不需要这种查询。实现这种功能的正确方法是使用 ON CASCADE DELETE
在每个 dbtuts.variationtablex
表中创建外键。
我是一名优秀的程序员,十分优秀!