为了账号安全,请及时绑定邮箱和手机立即绑定

删除MySQL中的JOIN

删除MySQL中的JOIN

阿波罗的战车 2019-07-01 16:03:01
删除MySQL中的JOIN下面是创建我的表的脚本:CREATE TABLE clients (    client_i INT(11),    PRIMARY KEY (client_id));CREATE TABLE projects (    project_id INT(11) UNSIGNED,    client_id INT(11) UNSIGNED,    PRIMARY KEY (project_id));CREATE TABLE posts (    post_id INT(11) UNSIGNED,    project_id INT(11) UNSIGNED,    PRIMARY KEY (post_id));在我的PHP代码中,当删除客户端时,我希望删除所有的项目帖子:DELETE FROM postsINNER JOIN projects ON projects.project_id = posts.project_idWHERE projects.client_id = :client_id;POST表没有外键。client_id,只有project_id..我想删除已通过的项目中的帖子。client_id.这是不可行的,因为没有删除的帖子。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您只需指定要从posts表:

DELETE postsFROM postsINNER JOIN projects ON projects.project_id = posts.project_idWHERE projects.client_id = :client_id

编辑:有关更多信息,您可以看到这个替代答案


查看完整回答
反对 回复 2019-07-01
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

由于您正在选择多个表,因此要从其中删除的表不再是明确的。你需要选择:

DELETE posts FROM postsINNER JOIN projects ON projects.project_id = posts.project_idWHERE projects.client_id = :client_id

在这种情况下,table_name1table_name2是同一个表,所以这个表可以:

DELETE projects FROM posts INNER JOIN [...]

如果需要,甚至可以从两个表中删除:

DELETE posts, projects FROM posts INNER JOIN [...]

请注意order bylimit 不要使用多表删除。.

还请注意,如果为表声明别名,则在引用表时必须使用别名:

DELETE p FROM posts as p INNER JOIN [...]


查看完整回答
反对 回复 2019-07-01
?
富国沪深

TA贡献1790条经验 获得超9个赞

或者用稍微不同的语法(更友好的海事组织)来做同样的事情:

DELETE FROM posts 
USING posts, projects 
WHERE projects.project_id = posts.project_id AND projects.client_id = :client_id;

顺便说一句,MySQL使用联接的速度几乎总是比子查询快.


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信