我正在尝试使用以下查询从多个表中删除
mysql> DELETE
-> info, pagelets, shingles, links
-> FROM
-> info
-> INNER JOIN pagelets
-> ON info.page_key=144
-> AND info.page_key=pagelets.page_key
-> INNER JOIN shingles
-> ON pagelets.pagelet_serial=shingles.pagelet_serial
-> INNER JOIN links
-> ON pagelets.pagelet_serial=links.pagelet_serial
-> ;
Query OK, 2050 rows affected (0.08 sec)
mysql> SELECT * FROM info;
+--------+----------+
| netloc | page_key |
+--------+----------+
| 1 | 2 |
| 1 | 118 |
+--------+----------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM pagelets WHERE page_key =144;
+----------+----------------+
| page_key | pagelet_serial |
+----------+----------------+
| 144 | 245 |
| 144 | 246 |
| 144 | 249 |
| 144 | 253 |不幸的是,这只适用于表格链接和信息。(不知道为什么它在pagelets和带状疱疹上无效)
最初的查询是:
# DELETE
# info, pagelets, shingles, links
# FROM
# info INNER JOIN pagelets INNER JOIN shingles INNER JOIN links
# WHERE
# info.page_key=%(page_key)s
# AND info.page_key=pagelets.page_key
# AND pagelets.pagelet_serial=shingles.pagelet_serial
# AND pagelets.pagelet_serial=links.pagelet_serial
#有谁能解释这个谜团吗?
发布于 2011-03-19 04:37:14
这将从info和所有其他连接到info的表中删除。语法是误导的,我知道,但它会工作的!
DELETE
info
FROM
info INNER JOIN pagelets INNER JOIN shingles INNER JOIN links
WHERE
info.page_key=%(page_key)s
AND info.page_key=pagelets.page_key
AND pagelets.pagelet_serial=shingles.pagelet_serial
AND pagelets.pagelet_serial=links.pagelet_serial顺便说一下,我知道这是一个古老的帖子,但是有很多用户在搜索答案时找到了这个帖子,所以真的没有古老的东西!-Rance
发布于 2009-09-06 17:30:59
将列出的要删除的表名替换为:
DELETE info.*, pagelets.*, shingles.*, links.*发布于 2009-09-06 17:35:54
一种更简洁的替代方法是在这些依赖表(pagelets、shingles、link)中使用带有ON DELETE CASCADE的外键限制,这样delete语句就不需要这么复杂了。
https://stackoverflow.com/questions/1386185
复制相似问题