首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个表中删除多个行

问从多个表中删除多个行
EN

Stack Overflow用户
提问于 2012-12-23 02:44:34
回答 2查看 109关注 0票数 2

我有三张桌子:

代码语言:javascript
复制
`MEMBERS`
with
`NAME` varchar(24) UNIQUE KEY

`LAST_LOGGED_IN` int(11) - It is a timestamp!

代码语言:javascript
复制
`HOMES`
with
`OWNER` varchar(24) 

代码语言:javascript
复制
`CARS`
with
`OWNER` varchar(24)

我对这些表使用了InnoDB,现在我的实际问题是:如果UNIX_TIMESTAMP()-**MEMBERS**.**LAST_LOGGED_IN** > 864000?,如何删除所有表中的行?

我正在尝试删除非活动成员的行,这是目前为止最困难的事情。我有大约40K行,而且还在增加。我经常用DELETE FROM MEMBERS WHERE UNIX_TIMESTAMP()-LAST_LOGGED_IN> 864000清洗它

你的任何帮助都是非常感激的!谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-23 04:08:55

如果您已经从MEMBERS表中删除了行,并且希望从其他两个表中删除那些OWNER列的值与MEMBERS表中任何行的NAME值不匹配的行:

代码语言:javascript
复制
DELETE h.*
  FROM `HOMES` h
  LEFT
  JOIN `MEMBERS` m 
    ON m.`NAME` = h.`OWNER`
 WHERE m.`NAME` IS NULL

DELETE c.*
  FROM `CARS` c
  LEFT
  JOIN `MEMBERS` m 
    ON m.`NAME` = c.`OWNER`
 WHERE m.`NAME` IS NULL

(注:这些语句还将从HOMES和CARS表( OWNER列)中删除行,作为空值。)

我强烈建议您在运行DELETE之前使用SELECT对这些语句进行测试。(用关键字选择替换关键字DELETE,即

代码语言:javascript
复制
-- DELETE h.*
SELECT h.*
  FROM `HOMES` h
  LEFT
  JOIN `MEMBERS` m 
    ON m.`NAME` = h.`OWNER`
 WHERE m.`NAME` IS NULL

接下来,如果希望保持这些表“同步”,可以考虑使用ON级联DELETE选项定义外键约束。

或者,可以使用DELETE语句从所有三个表中删除行:

代码语言:javascript
复制
DELETE m.*, h.*, c.*
  FROM `MEMBERS` m
  LEFT
  JOIN `HOMES` h
    ON h.`OWNER` = m.`NAME`
  LEFT
  JOIN `CARS` c
    ON c.`OWNER` = m.`NAME`
 WHERE UNIX_TIMESTAMP()-m.`LAST_LOGGED_IN` > 864000

(注:那里的谓词不能使用LAST_LOGGED_IN列上的索引。引用"bare“列的等价谓词将能够使用索引。

代码语言:javascript
复制
WHERE m.`LAST_LOGGED_IN` < UNIX_TIMESTAMP()-864000

或相当于:

代码语言:javascript
复制
WHERE m.`LAST_LOGGED_IN` < UNIX_TIMESTAMP(NOW() - INTERVAL 10 DAY)

为了获得最好的性能,您需要在HOMES和CARS上都有一个OWNER的领先列的索引。

代码语言:javascript
复制
... ON `HOMES` (`OWNER`)
... ON `CARS` (`OWNER`) 
票数 1
EN

Stack Overflow用户

发布于 2012-12-23 03:33:48

我不使用InnoDB,所以我不得不查找它,但它确实支持引用完整性。如果您设置了关系,然后打开DELETE级联,数据库本身将强制执行规则.也就是说,当您删除一个成员时,DBMS将负责删除相关的住宅和汽车。

看看here和here,它们可能会有所帮助。

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

https://stackoverflow.com/questions/14008229

复制
相关文章

相似问题

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