2013-11-01 2 views
0

저는 MySQL을 처음 사용하고 있으며 SQL 문을 변환하는 데 문제가 있으며 가능하다면 도움이 필요합니다.고유 ID와 고유하지 않은 ID를 기반으로 mysql에서 여러 레코드 삭제

마지막으로 로그인 날짜를 기준으로 한 테이블에서 항목을 삭제할 수 있어야합니다. 불행히도 테이블 디자인 (결함이 있음)을 제어 할 수 없으며 characterID와 characterID를 비교해야합니다. CharcaterID (비 고유)로 오브젝트를 추적하는 다른 테이블에서 항목을 삭제하려면 LastLogin 날짜. 여기

는 지금까지

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)))) 

내가 오류 당신은 FROM 절에서 갱신에서 대상 테이블 'object_date'를 지정할 수 없습니다 1093입니다있는 것입니다.

아이디어가 있으십니까?

답변

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

당신이 하위 쿼리 테이블 이름

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 
이름을하지 않는 경우 때때로 SQL이 barfs
관련 문제