2014-09-02 5 views
-3

Я пытаюсь удалить определенные строки в нескольких таблицах журналов, для активности, которая составляет> 5 дней. но хотите сохранить активность журнала, если посетитель_и_ид найден в log_customer.SQL 1064 - У вас есть ошибка в синтаксисе SQL при удалении по нескольким таблицам

следующие возвращается более 42 K строк:

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

Однако это возвращает ошибку 1064 SQL:

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 
<= NOW() - INTERVAL 5 DAY AND log_url.url_id' at line 3 

Я также получить .. .

#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 

... если я заменю NOW() ... с <= STR_TO_DATE('2014-08-21 10:00:00', '%Y-%m-%d %H:%i:%s')

+0

Что конкретная ошибка сообщение? Это поможет вам понять, где лежит синтаксическая ошибка MySQL. –

+0

# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «WHERE» log_url' .visit_time' <= NOW() - INTERVAL 5 DAY AND 'log_url'.'url_id' по строке 3 I также получите # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «WHERE» log_url''visit_time' <= STR_TO_DATE ('2014-08-21 10:00:00', '% Y-% m- % d% H: 'в строке 3 если я заменил NOW() ... на <= STR_TO_DATE (' 2014-08-21 10:00:00 ','% Y-% m-% d% H :% i:% s ') –

ответ

0

Не должно быть ...

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

, конечно! delete 'log_url',' log_url_info', 'log_visitor_info',' log_visitor' from ... Спасибо за гораздо более элегантный вариант с присоединением! –