删除MySQL中的JOIN

删除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.

这是不可行的,因为没有删除的帖子。


阿波罗的战车
浏览 615回答 3
3回答

宝慕林4294392

您只需指定要从posts表:DELETE postsFROM postsINNER JOIN projects ON projects.project_id = posts.project_idWHERE projects.client_id = :client_id编辑:有关更多信息,您可以看到这个替代答案

沧海一幻觉

由于您正在选择多个表,因此要从其中删除的表不再是明确的。你需要选择:DELETE posts FROM postsINNER JOIN projects ON projects.project_id = posts.project_idWHERE projects.client_id = :client_id在这种情况下,table_name1和table_name2是同一个表,所以这个表可以:DELETE projects FROM posts INNER JOIN [...]如果需要,甚至可以从两个表中删除:DELETE posts, projects FROM posts INNER JOIN [...]请注意order by和limit 不要使用多表删除。.还请注意,如果为表声明别名,则在引用表时必须使用别名:DELETE p FROM posts as p INNER JOIN [...]

富国沪深

或者用稍微不同的语法(更友好的海事组织)来做同样的事情:DELETE FROM posts  USING posts, projects  WHERE projects.project_id = posts.project_id AND projects.client_id = :client_id;顺便说一句,MySQL使用联接的速度几乎总是比子查询快.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL