2013-11-01 161 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