【发布时间】:2010-10-13 18:12:15
【问题描述】:
这是创建我的表格的脚本:
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 posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;
posts 表没有外键client_id,只有project_id。我想删除项目中已通过client_id的帖子。
目前无法使用,因为没有删除任何帖子。
【问题讨论】:
-
我认为 Yehosef 的答案应该是被接受的,因为他按照你的要求使用 Join 并且它比使用 yukondude 建议的 IN 子句表现更好......
-
首选模式是
DELETE posts FROM posts JOIN projects ...,而不是IN (subquery)模式。 (来自 Yehosef 的回答给出了首选模式的示例。) -
@GerardoGrignoli,它对特定引擎或 MySQL 版本的性能更好?这两个查询没有理由执行任何不同的操作,因为 AFAIK 它们是相同的。当然,如果每次我的查询优化器做一些愚蠢的事情时我都能得到一分钱......
-
你也可以使用
alias作为表名并使用它。 -
只有傻瓜才会认为他们可以通过查看查询来预测性能。看起来比执行难度高 10 倍的查询可能会快得多。这很大程度上取决于键。
标签: mysql