2014-09-02 4 views
-3

> 5 일이 지난 작업에 대해 여러 로그 테이블에서 특정 행을 삭제하려고합니다. visitor_id가 log_customer에 있으면 로그 활동을 보존하려고합니다. 나는 또한 얻을SQL 1064 - 여러 테이블에서 삭제할 때 SQL 구문에 오류가 있습니다.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 'WHERE log_url.visit_time 
<= NOW() - INTERVAL 5 DAY AND log_url.url_id' at line 3 

.. :

SELECT * 
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor` 
WHERE `log_url`.`visit_time` <= NOW() - INTERVAL 5 
DAY 
AND `log_url`.`url_id` = `log_url_info`.`url_id` 
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id` 
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id` 
AND `log_url`.`visitor_id` NOT IN (select `log_customer`.`visitor_id` from `log_customer`) 

그러나, 이것은 SQL 1064 오류를 반환합니다 :

다음 반환 K (42)를 통해 행

DELETE 
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor` 
WHERE `log_url`.`visit_time` <= NOW() - INTERVAL 5 
DAY 
AND `log_url`.`url_id` = `log_url_info`.`url_id` 
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id` 
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id` 
AND `log_url`.`visitor_id` NOT IN (select `log_customer`.`visitor_id` from `log_customer`) 

오류 메시지 .

#1064 - You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 'WHERE log_url.visit_time 
<= STR_TO_DATE('2014-08-21 10:00:00', '%Y-%m-%d %H:' at line 3 

... 나는 그게 있어야하지 <= STR_TO_DATE('2014-08-21 10:00:00', '%Y-%m-%d %H:%i:%s')

+0

메시지? MySQL 구문 오류가 어디에 있는지 파악하는 데 도움이 될 것입니다. –

+0

# 1064 - SQL 구문에 오류가 있습니다. 'WHERE'log_url' 근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오 .'visit_time' <= NOW() - 3 행의 간격 5 일 및'log_url'.url_id' I 또한 얻으십시오 # 1064 - SQL 구문에 오류가 있습니다. 'WHERE'log_url' 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오 .'visit_time' <= STR_TO_DATE ('2014-08-21 10:00:00 ','% Y- % m- % d % H : '를 입력하십시오. NOW()를 <= STR_TO_DATE ('2014-08-21 10:00:00 ','% Y- % m- % d % H : % i : % s ') –

답변

0

로 ... NOW() 교체하면 ...

DELETE `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor` 
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor` 
WHERE `log_url`.`visit_time` <= NOW() - INTERVAL 5 DAY 
AND `log_url`.`url_id` = `log_url_info`.`url_id` 
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id` 
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id` 
AND `log_url`.`visitor_id` NOT IN (select `log_customer`.`visitor_id` from log_customer`) 

또는 ... 특정 오류 무엇

DELETE u 
    , ui 
    , vi 
    , v 
    FROM log_url u 
    JOIN log_url_info ui 
    ON ui.url_id = u.url_id 
    JOIN log_visitor_info vi 
    ON vi.visitor_id = u.visitor_id 
    JOIN log_visitor v 
    ON v.visitor_id = u.visitor_id 
WHERE u.visit_time <= NOW() - INTERVAL 5 DAY 
    AND u.visitor_id NOT IN (SELECT visitor_id FROM log_customer) 
+0

물론! 삭제'log_url','log_url_info','log_visitor_info','log_visitor' .. .. 조인과 함께 훨씬 더 우아한 옵션을 가져 주셔서 감사합니다! –