从两个表中删除(查看是否存在数据)

时间:2018-10-09 09:16:19

标签: mysql

我无法在一个查询中从两个表中删除数据。 我发现了几个类似的线程,但是没有一个与我有相同的核心问题。

那么,为什么有这个不同呢?

目标:我需要有关如何从我的project数据库中删除所有项目数据以及最终最终附加的所有小时的帮助放在hours数据库中。

使用我当前的查询,只有在projecthours数据库中都找到匹配项时,它才会删除。那么如何才能按照上面的要求删除所有数据呢?

现在我的查询如下:

DELETE hours, projects
FROM hours 
INNER JOIN projects  
WHERE hours.projecthours_id= projects.project_id and hours.projecthours_id = ".$mysqli->real_escape_string($_GET['id']).";

这是我的两个表(示例数据和表):

#hours
---------------------------------------
hours_id  projecthours_id  amount_hours 
1         12               15
2         8                4
3         9                2
4         15               11

#projects
---------------------------------------
project_id  project_name  
1           project 1
2           project 2
3           project 3
4           project 4

3 个答案:

答案 0 :(得分:1)

尝试使用左外部联接而不是内部联接,然后where转到on

尝试一下

DELETE hours, projects
FROM hours 
LEFT OUTER JOIN projects on hours.projecthours_id= projects.project_id
WHERE hours.projecthours_id = ".$mysqli->real_escape_string($_GET['id']).";

答案 1 :(得分:1)

  • 使用Left Join代替Inner Join
  • 此外,由于您正尝试从where表中删除所有内容,因此您的projects.project_id条件应该在hours.projecthours_id而不是projects上。

尝试:

DELETE hours, projects
FROM hours 
LEFT JOIN projects ON projects.project_id = hours.projecthours_id
WHERE projects.project_id = ".$mysqli->real_escape_string($_GET['id']).";

答案 2 :(得分:0)

无法通过一个查询来工作。 因此,将它们改为两个单独的。

$query = "DELETE FROM hours WHERE hours.projecthours_id = ".$mysqli->real_escape_string($_GET['id'])."";

$mysqli->query($query);
$query = "DELETE FROM projects WHERE projects.project_id = ".$mysqli->real_escape_string($_GET['id'])."";
相关问题