2013-11-01 153 views
0

我是MySQL的新手,并且在转换SQL语句时遇到困难,并且希望尽可能地提供一些帮助。从MySQL删除多个记录基于唯一的ID和非唯一的ID

运行是我需要能够根据上次登录日期从一个表中删除项目,不幸的是我无法控制表格设计(这是有缺陷的)并且必须将characterID与characterUID进行比较,并且LastLogin日期,以便从仅通过charcaterID(非唯一)跟踪对象的另一个表中删除项目。

这里是我迄今为止

DELETE FROM object_data WHERE CharacterID IN (
    SELECT CharacterID FROM object_data 
    WHERE CharacterID IN (
     SELECT CharacterID FROM character_data 
      WHERE LastLogin < DATE_SUB(NOW(), INTERVAL 30 DAY) 
      AND PlayerUID NOT IN (
       SELECT PlayerUID FROM character_data 
        WHERE LastLogin > DATE_SUB(NOW(), INTERVAL 30 DAY)))) 

我得到的错误是1093 FROM子句您不能从更新指定目标表“object_date”。

任何想法?

回答

0

现在就来试试:

DELETE FROM object_data WHERE CharacterID IN (
    SELECT CharacterID FROM (
     SELECT CharacterID FROM character_data 
      WHERE LastLogin < DATE_SUB(NOW(), INTERVAL 30 DAY) 
      AND PlayerUID NOT IN (
       SELECT PlayerUID FROM character_data 
        WHERE LastLogin > DATE_SUB(NOW(), INTERVAL 30 DAY)))y) 
0

有时SQL barfs如果你不姓子查询的表名

DELETE FROM object_data 
WHERE CharacterID IN 
(
    SELECT CharacterID 
    FROM object_data 
    WHERE CharacterID IN 
    (
    SELECT CharacterID 
    FROM character_data 
    WHERE LastLogin < DATE_SUB(NOW(), INTERVAL 30 DAY) 
    AND PlayerUID NOT IN 
    (
     SELECT PlayerUID 
     FROM character_data 
     WHERE LastLogin > DATE_SUB(NOW(), INTERVAL 30 DAY) 
    ) AS t1 
) AS t2 
) AS t3