首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ON not working从多个表中删除MySQL

使用ON not working从多个表中删除MySQL
EN

Stack Overflow用户
提问于 2009-09-06 17:23:50
回答 4查看 1.3K关注 0票数 0

我正在尝试使用以下查询从多个表中删除

代码语言:javascript
复制
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和带状疱疹上无效)

最初的查询是:

代码语言:javascript
复制
#        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
#

有谁能解释这个谜团吗?

EN

回答 4

Stack Overflow用户

发布于 2011-03-19 04:37:14

这将从info和所有其他连接到info的表中删除。语法是误导的,我知道,但它会工作的!

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2009-09-06 17:30:59

将列出的要删除的表名替换为:

代码语言:javascript
复制
DELETE info.*, pagelets.*, shingles.*, links.*
票数 0
EN

Stack Overflow用户

发布于 2009-09-06 17:35:54

一种更简洁的替代方法是在这些依赖表(pagelets、shingles、link)中使用带有ON DELETE CASCADE的外键限制,这样delete语句就不需要这么复杂了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1386185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档