gpt4 book ai didi

php - 如何在一个删除查询中使用多个表名 - 并非所有表都有数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:17 26 4
gpt4 key购买 nike

我需要什么

我有一个名为 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 表中创建外键。

关于php - 如何在一个删除查询中使用多个表名 - 并非所有表都有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50639371/

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